原博客:jianshu.com/p/31b09a13f212
和
https://www.cnblogs.com/ArthurXml/p/6555509.html
判断A构造函数的prototype对象是否在B的原型链上:
B instanceof A:
语法: 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();
. . .
console.log(Fi.prototype.isPrototypeOf(fum));//true
A对象是否在B的原型链上,A是不是B原型链上的长辈
A.isPrototypeOf(B):
语法: object instanceof constructor
参数: object 要检测的对象. constructor 某个构造函数
描述:instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
function C(){}
function D(){}
var o = new C();
// true,因为 Object.getPrototypeOf(o) === C.prototype
o instanceof C;
// false,因为 D.prototype不在o的原型链上
o instanceof D;
o instanceof Object; // true,因为Object.prototype.isPrototypeOf(o)返回true
C.prototype instanceof Object // true,同上
C.prototype = {};
var o2 = new C();
o2 instanceof C; // true
o instanceof C; // false,C.prototype指向了一个空对象,这个空对象不在o的原型链上.
D.prototype = new C(); // 继承
var o3 = new D();
o3 instanceof D; // true
o3 instanceof C; // true