instanceof原理と簡単な実現
4754 ワード
1.何ですか
MDNにはinstanceofが記述されています.
The instanceof operator tests whether the prototype property of a constructor appears anywhere in the prototype chain of an object.
2.実現
ここでは、どのように実現するかを説明しています.最初の を見つけるためにオブジェクトでなければならない. である.反復、左側オブジェクトのプロトタイプが右側の を再付与.
コード:
3.注意が必要な場合
以下の状況はfalse
MDNにはinstanceofが記述されています.
The instanceof operator tests whether the prototype property of a constructor appears anywhere in the prototype chain of an object.
instanceof
演算子は、コンストラクション関数のprototypeプロパティがオブジェクトプロトタイプチェーン内の任意の場所に表示されるかどうかをテストするために使用されます.2.実現
ここでは、どのように実現するかを説明しています.
instanceof
の左側は、そのプロトタイプチェーンinstanceof
右側は関数でなければならず、関数はprototype
属性prototype
に等しくない場合、プロトタイプチェーンに沿って左側コード:
const instance_of = (left, right) => {
// false
const baseType = ['number', 'string', 'boolean', 'undefined', 'symbol']
if(baseType.includes(typeof left)) return false
//
const RP = right.prototype
while(true) {
// , left.__proto__.__proto__.... null,
// null instanceof , Object,
if(left === null) {
return false
} else if(left === RP) {
return true
}
// ? left
left = left.__proto__
}
}
3.注意が必要な場合
以下の状況はfalse
/**
* 'abc' ,
* 'abc'.__proto__ === String.prototype
* , ( 'abc'.__proto__ ), ,
* new String('abc')
* 'abc' instanceof String
*/
'abc' instanceof String // false
// null , null __proto__
null instanceof Object // false
// String.__proto__.constructor.name === 'Function'
String instanceof String // false
Number instanceof Number // false
//....
//....