isPrototypeOf()
方法用于测试一个对象是否存在于另一个对象的原型链上。
例如Object.prototype.isPrototypeOf({})
这条语句用于测试Object.prototype
指向的对象是否在对象{}
的原型链上。

这条语句的返回值是true
,因为用字面量创建的对象等同于用构造函数Object
创建的对象实例,默认的原型对象都是Object.prototype
,存在于对象实例的原型链上。
instanceof
操作符用于测试一个构造函数的prototype
属性(指向该构造函数实例的原型对象)是否存在于另一个对象的原型链上。
例如({}) instanceof Object
这条语句用于测试构造函数Object
的prototype
属性指向的对象是否存在于空对象{}
的原型链上。

可以看出:isPrototypeOf()
方法的左右侧都是对象,而instanceof
操作符的右侧必须是一个函数,因为函数才有prototype
属性。
两者的功能类似,可以简单总结如下:
A.isPrototypeOf(B)
判断的是A
对象是否存在于B
对象的原型链之中。
A instanceof B
判断的是构造函数B
的B.prototype
是否存在与A
的原型链之中。
推荐使用isPrototypeOf()
方法,因为它能解决所有问题,不管要测试的是对象还是构造函数(测试构造函数时无非是多加个.prototype
)。