instanceofの実現原理の解析と手書きinstanceofの実現

1. タイプ判定。

ご存知のとおり、JavaScript では変数の型を検出する方法として次の 3 つが存在します。もちろん、この記事では最初の 2 つを省略し、instanceof実装原理手書きの instanceof の実装に焦点を当てます。

  • typeof法

 

  • Object.prototype.toString.call()

  • インスタンスの

2.instanceofの実現原理。

  • 正式:

instanceof演算子は、コンストラクタープロトタイププロパティがオブジェクトのプロトタイプ チェーンのどこかに現れるをテストするために使用されます

  • 言語:

Instanceof Bの場合a はオブジェクトでなければならずB は有効な関数でなければなりません。両方の条件が満たされる場合: B のプロトタイプ プロパティが指すプロトタイプオブジェクト( B.prototype ) がオブジェクト aプロトタイプ チェーン上にあるかどうかを判断します存在する場合は true を返し、存在しない場合は false を返します。つまり、instanceof の原理は、実際にはプロトタイプ チェーンを見つけるプロセスです

3. 手書きのinstanceofの実装。

function myInstanceof(left,right){
        //获取(构造)函数的(显式)原型
        let rp = right.prototype;
        //获取对象的(隐式)原型
        left = left.__proto__;
        //判断对象的(隐式)原型是否等于(构造)函数的(显式)原型
        while(true){
          if(left === null){
            return false
          }
          if(left === rp){
            return true
          }
          left = left.__proto__
        }
      }

      let a = /12/;
      let b = '123';
      console.log(a instanceof RegExp,myInstanceof(a,RegExp));  //true,true
      console.log(b instanceof RegExp,myInstanceof(b,RegExp));  //false,false

 

おすすめ

転載: blog.csdn.net/Yi2008yi/article/details/124102143