isPrototypeOf()与instanceof运算符不同。在表达式"object instanceof AFunction"中,object的原型链是针对AFunction.prototype进行检查的,而不是针对AFunction本身。
instanceOf用于检查左侧对象是否是右侧构造函数生成的实例(object instanceof constructor,检测constructor.prototype是否存在于参数object的原型链上。)。
const arr = [1, 2, 3];
console.log(arr instanceof Array); // true
console.log(Array instanceof Object); // true
console.log(arr instanceof Object); // true
// instanceOf 在判断的时候,算上整条原型链
// arr 是 Array 和 Object 任何一个类的示例
1
2
3
4
5
6
7
2
3
4
5
6
7
isProtoTypeOf()方法允许你检查一个对象是否存在于另一个对象的原型链上,判断是否是某个实例对象的原型对象。
function Person() {}
function Dog() {}
const p1 = new Person();
console.log(Person.prototype.isPrototypeOf(p1)); // true
console.log(Object.prototype.isPrototypeOf(p1)); // true
console.log(Dog.prototype.isPrototypeOf(p1)); // false
1
2
3
4
5
6
2
3
4
5
6
TIPS
如果A.isPrototypeOf(B)返回true,则B instanceof A一定返回true
const obj = {};
console.log(Object.isPrototypeOf(obj)); // false
console.log(obj instanceof Object); // true
console.log(Object.prototype.isPrototypeOf(obj)); // true
1
2
3
4
2
3
4
A.isPrototypeOf(B)判断的是A对象是否存在于B对象的原型链之中。A instanceof B判断的是B.prototype是否存在与A的原型链之中。