javascript-手写实现instanceOf

instanceof判断右边元素的prototype是否在左边元素的原型链上,左边元素沿着原型链不断往上查找,直到结束,如果查找期间找到原型链中存在左边元素的prototype,返回true,查找完都没有找到,返回false.

function instanceof(target, type) {
    let L = target.__proto__
    while (L) {
        if (L === type.prototype) {
            return true
        }
        L = L.__proto__
    }
    return false
}

const a = []
console.log(a instanceof Object, ', a instanceof Object is true')
console.log(a instanceof Array, ', a instanceof Array is true')
console.log(a instanceof Number, ', a instanceof Number is false')
console.log(instanceof(a, Object), ', instanceOf(a, Object) is true')
console.log(instanceof(a, Array), ', instanceOf(a, Array) is true')
console.log(instanceof(a, Number), ', instanceOf(a, Number) is false')
// true , a instanceof Object is true
// true , a instanceof Array is true
// false , a instanceof Number is false
// true , instanceOf(a, Object) is true
// true , instanceOf(a, Array) is true
// false , instanceOf(a, Number) is false
实现一个类似于`instanceof`函数的功能,可以参考以下步骤: 1. 首先,获取构造函数的显式原型(`right.prototype`)。 2. 然后,获取对象的隐式原型(`left.__proto__`)。 3. 接下来,使用一个循环判断对象的隐式原型是否等于构造函数的显式原型。如果相等,则返回`true`,表示对象是构造函数的实例;如果隐式原型为`null`,则返回`false`,表示对象不是构造函数的实例;如果隐式原型与构造函数的显式原型不相等,则将隐式原型更新为其自身的隐式原型,继续循环判断。 4. 最后,测试函数的实现是否正确,可以尝试使用类似于`console.log(myInstanceof(a, RegExp))`的方式进行验证。 总结起来,实现`instanceof`函数的主要思路是通过比较对象的隐式原型和构造函数的显式原型,来判断对象是否是构造函数的实例。 需要注意的是,以上实现思路是基于JavaScript的内部机制,即通过比较隐式原型是否相等来判断对象的类型。因此,在实际应用中,可以使用该函数来进行类型判断。 参考资料: - 实现instanceof运算符的示例代码 - 众所周知,在JavaScript中,检测一个变量的类型,无疑有以下三种方法。当然,本文会略过前两种,重点讲述instanceof实现原理和手写instanceof实现。 - instanceof 运算符用于测试构造函数的 prototype 属性是否出现在对象原型链中的任何位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值