value instanceof Constructor
不啰嗦,一句话阐述instanceof操作符的原理:
value的原型链中是否包含Constructor的原型对象
function myInstanceof(instance, constructor) {
const currentPrototype = Object.getPrototypeOf(instance)
if (currentPrototype === null) {
return false
}
if (currentPrototype.constructor === constructor) {
return true
}
return myInstanceof(currentPrototype, constructor)
}
console.log(myInstanceof([], Array)) // true
console.log(myInstanceof([], Object)) // true
console.log(myInstanceof([], Date)) // false
console.log(myInstanceof(() => { }, Function)) // true
console.log(myInstanceof(() => { }, Object)) // true
console.log(myInstanceof(() => { }, Array)) // false
console.log(myInstanceof({}, Object)) // true
console.log(myInstanceof({}, Function)) // false
console.log(myInstanceof({}, Array)) // false