instanceof操作符的用法:
instance instanceof Constructor
不啰嗦,一句话阐述instanceof操作符的原理:instance的原型链中是否包含Constructor的原型对象?
// 使用递归的方法更方便
function myInstanceof(instance, constructor) {
const currentPrototype = Object.getPrototypeOf(instance)
if (currentPrototype === null) {
return false
}
if (currentPrototype === constructor.prototype) {
return true
}
return myInstanceof(currentPrototype, constructor)
}
function Sup() {
}
function Sub() {
}
Sub.prototype = new Sup()
class Person { }
class Student extends Person { }
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
console.log(myInstanceof(new Sub(), Sub)) // true
console.log(myInstanceof(new Sub(), Sup)) // true
console.log(myInstanceof(new Sub(), Object)) // true
console.log(myInstanceof(new Student(), Student)) // true
console.log(myInstanceof(new Student(), Person)) // true
console.log(myInstanceof(new Student(), Object)) // true
欢迎评论,欢迎纠错,我们一起成长!
xyzh.work@foxmail.com