instanceofとは?
どのコンストラクタから作成されたオブジェクトかを確認する。
使い方
case1
コンストラクタ関数 instance の Fを instanceofで評価するとtrue
と評価され、
Fから作成されたインスタンスだということがわかる。
function F(a, b) {
this.a = a;
this.b = b;
}
F.prototype.c = function() {}
const instance = new F(1, 2);
console.log(instance instanceof F) >> true
case2
今度は、コンストラクタFの戻り値をオブジェクト形式でreturn するとfalse
となる。
function F(a, b) {
this.a = a;
this.b = b;
return {a: 1}
}
F.prototype.c = function() {}
const instance = new F(1, 2);
console.log(instance instanceof F) >> false
違いは何か?
returnされたものは,function Fで作成されたオブジェクトではなく別のオブジェクトになる。すなわちfalse。
つまり、returnされたオブジェクトは以下のようなプロセスになっている。
function F(a, b) {
this.a = a;
this.b = b;
const result = new Object();
result.a = 1;
return result;
}
作成したF関数はどのようになっているか?
これはFコンストラクタ内部でreturnされているのはresultなのでF===resultという形になっている。