isPrototypeOf() 方法用于测试一个对象是否存在于另一个对象的原型链上。
注:
isPrototypeOf 和 instanceof operator 是不一样的。在表达式 object instanceof AFunction 中,检测的是 AFunction.prototype 是否在object 的原型链中,而不是检测 AFunction 自身。语法
prototypeObj.isPrototypeOf(object)
参数
- object
- 在该对象的原型链上搜寻
返回值
Boolean,表示调用对象是否在另一个对象的原型链上。
描述
isPrototypeOf 方法允许你检查一个对象是否存在于另一个对象的原型链上。
例如,考虑下面的原型链:
function Fee() {
// . . .
}
function Fi() {
// . . .
}
Fi.prototype = new Fee();
function Fo() {
// . . .
}
Fo.prototype = new Fi();
function Fum() {
// . . .
}
Fum.prototype = new Fo();
下面创建一个 Fum 实例,检测 Fi.prototype 是否存在于该实例的原型链上。
var fum = new Fum();
. . .
if (Fi.prototype.isPrototypeOf(fum)) {
// do something safe
}
当需要判断对象的后代是否在特定原型链上,例如,以保证一定的方法或属性将存在该对象上,这时候就需要用到 instanceof。
规范
| 规范版本 | 规范状态 | 注解 |
|---|---|---|
| ECMAScript 3rd Edition (ECMA-262) | Standard | Initial definition. |
| ECMAScript 5.1 (ECMA-262) Object.prototype.hasOwnProperty |
Standard | |
| ECMAScript 2015 (6th Edition, ECMA-262) Object.prototype.hasOwnProperty |
Standard | |
| ECMAScript 2017 Draft (ECMA-262) Object.prototype.hasOwnProperty |
Draft |
浏览器兼容性
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |