简说JS中的instanceof

instanceof操作符在MDN上的解释为:定义instanceof运算符用于测试构造函数的prototype属性是否出现在对象的原型链的任何位置

1、作用:判断一个引用是否属于某构造函数或在继承关系中判断一个实例是否属于他的父类型。

2、判断逻辑:从当前引用的proto一层一层顺着原型链往上找,看能否找到对应的prototype。

3、使用方法:object instanceof constructor。

object指的是需要测试的对象,constructor指的是构造函数。判断object的原型链上是否有constructor.prototype。如果object是constructor的一个实例,就返回true;否则返回false。

4、实现instanceof:

function _instanceof(obj,fun){
    let f = fun.prototype;
    obj = obj._proto_;
    while(true){
        if(obj === null){
            return false;
        }
        if(f === obj){
            return true;
        }
        obj = obj._proto_;
    }
}

5、与typeof的异同之处

相同点:都可以判断变量类型

不同点:instanceof只能判断对象、函数和数组,不能判断字符串和数字等;而typeof可用于判断一个表达式的原始值。 

6、栗子们

//未发生继承
function F(){};
function H(){};
var f = new F();
var h = new H();

console.log(f instanceof F); //true
console.log(f instanceof H); //false
console.log(f instanceof Object); //true
console.log(F.prototype instanceof Object); //true

console.log(h instanceof F); //false
console.log(h instanceof H); //true
console.log(h instanceof Object); //true
console.log(H.prototype instanceof Object); //true
//发生继承
function F(){};
function H(){};
F.prototype = new H();
var f = new F();

console.log(f instanceof F); //true
console.log(f instanceof H); //true
console.log(f instanceof Object); //true
console.log(F.prototype instanceof Object); //true

console.log(h instanceof F); //false
console.log(h instanceof H); //true
console.log(h instanceof Object); //true
console.log(H.prototype instanceof Object); //true

instanceof与原型和原型链联系紧密,若要搞清楚其中底层原理,可先参考下篇,再回头看此篇,就容易多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值