instanceof
instanceof作用
instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上
object(实例对象) instanceof constructor(构造函数)
function C(){}
function D(){}
var o = new C();
o:实例对象
- prototype(原型对象)
- 实例对象具有__proto__属性,指向它的构造函数的原型对象(o.__proto__===C.prototype)
- 实例对象也有自己的实例对象,直到找到null(o.__proto__.__proto__===Object.prototype)
如何写一个instanceof函数
function getInstanceOf(obj, construct) {
let flag = false;
while(obj.__proto__) {
if (obj.__proto__ === construct.prototype) {
flag = true;
break;
}
obj = obj.__proto__;
}
return flag;
}
一些与instanceof有关的函数
- Object.getPrototypeOf(o)===C.prototype得到o的原型对象
- Object.prototype.isPrototypeOf(o) o是否为Object的派生实例。