美文网首页
js--instanceof操作符详解

js--instanceof操作符详解

作者: 栗子酥小小 | 来源:发表于2017-03-25 11:06 被阅读0次
    • 首先,instanceof可以检查某个实例是否是由某个构造函数生成的,由于它是用原型链来检查,所以百分百正确,不像constructor可能会被程序员改变。

    • instanceof操作的伪代码如下:
      function instance_of(L, R) {
      var o = R.prototype;
      L = L.proto;
      while(true){
      if(L === null) return false; //该实例是用Object.create(null)构造出来的,没有原型
      if(L === o) return true; //R在L的原型链上
      L = L.proto;
      }
      }

      • 解析:先取右边构造函数的原型对象,然后遍历左边实例的原型链上的各个prototype,如果有一次两者指向的是同一个prototype对象,就返回true,说明左边是右边生出的实例。或者右边的子类生出的实例。
    • 在非严格模式下,用instanceof可以检查构造函数在被调用时是否有new,以此来编写作用域安全的构造函数(也就是即使调用构造函数时忘了用new,也能正常运行)

      • 因为只有new出来的实例,在运行function内部的代码时,this才会指向新对象,而此时 this instanceof Func已经能够正确判断。
    • 代码如下:
      function Person(name) {
      if(this instanceof Person){
      // call with "new"
      this.name = name;
      }else {
      // call without "new"
      return new Person(name);
      }
      }

    相关文章

      网友评论

          本文标题:js--instanceof操作符详解

          本文链接:https://www.haomeiwen.com/subject/sjxcottx.html