相同点
Object.prototype.isPrototypeOf 与 instanceof 都是判断目标对象是否在另一个对象的原型链上的方法,都会在另一个对象的原型链上往上查找
不同点
写法:
Object.prototype.isPrototypeOf()
function foo(){} // 定义函数
foo.prototype = {
a: 1
}; // 编辑函数的原型对象
let con = new foo(); // 创建对象实例
console.log(con.a);
//打印的是1,说明实例对象继承了foo函数的属性,那么foo函数自然也在con实例对象的原型链上了
console.log(foo.prototype.isPrototypeOf(con)); // true
console.log(Object.prototype.isPrototypeOf(con)); // true 对象原型链上都存在Object对象
instanceof
function foo(){} // 定义函数
let con = new foo(); //创建对象实例
console.log(con instanceof foo); // true
console.log(con instanceof Object); // true 对象原型链上都存在Object对象
instanceof会自动取出foo函数对象的原型,检测其是否在con对象实例的原型链上,而isPrototypeOf则需要以其原型作为参数,但是两者作用无异