JavaScript——instanceof操作符的原理

发布时间 2024-01-04 22:09:32作者: 周祥宇

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