instanceof
方法说明
判断指定构造函数的原型对象是否出现在指定对象的原型链上
示例
function Test (name) {
this.name = name
this.log = function () {
console.log(this.name)
}
}
const t = new Test()
// 判断对象t是否是另一个对象(Test)的实例
// 判断方法就是: Test.prototype是否出现在t的原型链上
console.log(t instanceof Test) // true
源码
// 判断constructor.prototype是否出现在obj的原型链上
function myInstanceof (obj, constructor) {
// 获取实例对象obj的原型对象
let obj__proto__ = obj.__proto__
while (1) {
if (obj__proto__ === null) {
return false
}
if (obj__proto__ === constructor.prototype) {
return true
}
obj__proto__ = obj__proto__.__proto__
}
}
// 示例
function Test (name) {
this.name = name
this.log = function () {
console.log(this.name)
}
}
const t = new Test('lyn')
console.log(myInstanceof(t, Test)) // true
function A () {}
console.log(myInstanceof(t, A)) // false