通常の関数で thisを探す
インスタンスの作成と作成されたインスタンスの値の比較、プライベートプロパティのインスタンス検出
function Fn() {
// this.xxx=xxx これらはすべて、現在のインスタンスに対する "プライベート "メソッドである。”属性
this.x = 100;
this.say = function () {};
}
Fn(); //=>this:window
let f1 = new Fn(); //=>this:クラスFnの現在のインスタンスf1
let f2 = new Fn();
//=>f1インスタンスオブジェクトのプライベートプロパティxの値を取得する === f2インスタンスオブジェクトのプライベートプロパティxの値を取得する
console.log(f1.x === f2.x); //=>true
//f1とf2のヒープは同じヒープではない。
console.log(f1.say === f2.say); //=>false
//プライベート・プロパティ名が含まれているかどうかを検出する例:hasOwnProperty
console.log(f1.hasOwnProperty('say')); //=>true
各配列はArrayクラスのインスタンスです。
1.すべてのオブジェクトはObjectクラスのインスタンスです。
2.各数字はNumberクラスのインスタンスです。
/* 各配列は組み込み配列クラスであるArrayのインスタンス */ let arr1 = [10, 20]; let arr2 = [30, 40];
プロトタイプの連鎖
- 1.すべての関数はprototypeというプロパティを持って生まれ、関数のprototypeのプロパティの値はオブジェクト⇒"prototypeオブジェクトに格納されているプロパティとメソッドは、現在のクラスインスタンスが呼び出すために公開されているプロパティとメソッドである"
- 普通の関数
- クラスも関数型の値
- 2.クラスのプロトタイプオブジェクトには、デフォルトでコンストラクタという組み込み属性があり、属性の値は現在のクラスそのものなので、クラスはコンストラクタとも呼ばれます。
- 3.すべてのオブジェクトは、現在のインスタンスが属するクラスのプロトタイプであるprotoというプロパティを持って生まれます。
- 1) オブジェクトデータ型の値
- 配列オブジェクト
- 通常のオブジェクト
- 通常のオブジェクト
- 2) インスタンスもオブジェクト型の値
- 3) クラスのprototype属性の値もオブジェクトです。
- 4) 関数にもオブジェクトの特性があります。
- 5) すべてのオブジェクト・データ型の値は、組み込みクラスObjectのインスタンスです。
プロトタイプ thisエクササイズ
function Fn() {
this.x = 100;
this.y = 200;
this.getX = function () {
console.log(this.x);
}
}
Fn.prototype.getX = function () {
console.log(this.x);
};
Fn.prototype.getY = function () {
console.log(this.y);
};
let f1 = new Fn;
let f2 = new Fn;
console.log(f1.getX === f2.getX);
console.log(f1.getY === f2.getY);
console.log(f1.__proto__.getY === Fn.prototype.getY);
console.log(f1.__proto__.getX === f2.getX);
console.log(f1.getX === Fn.prototype.getX);
console.log(f1.constructor);
console.log(Fn.prototype.__proto__.constructor);
f1.getX();
f1.__proto__.getX();
f2.getY();
Fn.prototype.getY();
プロトタイプ演習
function Fn(num) {
this.x = this.y = num;
}
Fn.prototype.AA = 100;
Fn.prototype = {
x: 20,
sum: function () {
console.log(this.x + this.y);
}
};
let f = new Fn(10);
console.log(f.sum === Fn.prototype.sum);
f.sum();
Fn.prototype.sum();
console.log(f.constructor);