instanceof的使用

instanceof的作用:instanceof是用来判断左边的对象是否为右边构造函数的实例

instanceof的是如何判断的?

①  语法A instanceof B ,A是实例对象,B是构造函数
②  如果B函数的显式原型对象(prototype)A对象的原型链(__proto__链),则返回true,否则返回false。

1. 代码体验

<script>
    /* 案例1 */
    function Foo() {};
    let f1 = new Foo();
    console.log(f1 instanceof Foo);  // true,f1是通过new Foo产生的实例,故为true
    // f1先通过自身的__proto__到Foo的prototype,然后Foo的prototype是Object的实例对象,所以利用__proto__就到Object的prototype了,从而Object的原型对象的确在f1的原型链上,所以为true
    console.log(f1 instanceof Object);  // true
</script>

下图的图解,可以更好的理解上述代码得到的结果:

<script>
   /* 案例2 */
    console.log(Object instanceof Function);  // true
    console.log(Object instanceof Object);   // true
    console.log(Function instanceof Function);  // true
    console.log(Function instanceof Object);  // true
    function Foo(){};
    console.log(Object instanceof Foo);  // true
</script>

上述代码的结果,可以根据下图的关系链条,得到解释。

注意:Function是通过new自己产生的实例,即Function = new Function(),所以Function在作为实例对象时,其__proto__属性指向的是其构造函数的显示原型,即Function.prototype.

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值