new演算子のシミュレーション実現

3485 ワード

JavaScriptのnew演算子を一言で紹介します.
new                                   
JavaScriptでnew演算子は構造関数を利用してオブジェクトを作成したことを知っています.今日はこのnew演算子の機能をシミュレートします.
new関演算子が立体関数でオブジェクトを作成して得られたオブジェクトを分析します.
1.               this      
2.                       。
上の二つの点に基づいて、シミュレーションnewについて話してみます.これらの注意点があります.
  • newを用いて立体関数を用いてオブジェクトの戻り値を作成する.
  • 関数に戻り値がない場合、デフォルトはthis
  • に戻ります.
  • は、関数がオブジェクトに戻ると、このオブジェクト
  • に戻ります.
  • 戻り値がnull、undefinedである場合、元の値を返します.
  • 戻り値がオブジェクト、配列、functionの場合は、サブタイプ
  • に戻ります.
  • this属性の割当値
  • 関数におけるthisの属性の書き込み操作は、リターンされたオブジェクトの上に
  • が与えられます.
  • 関数プロトタイプチェーンの継承
  • が返したオブジェクトは、関数のプロトタイプチェーン
  • を継承します.
    以上の注意点によってコードでnewをシミュレーションしてみましたが、newはキーワードですので、関数形式でシミュレーションしてみます.
    function objectFactory() {
                var Constructor = [].shift.call(arguments);
                var obj = Object.create(Constructor.prototype);
                var result = Constructor.apply(obj, arguments);
                return Object.prototype.toString.call(result).match(/^\[object (\w+)\]$/)[1] === "Object" || "Function"  ? result : obj;
            }
    
    コードの詳細
  • [].shift.call(argments)によってargmentsの第一位パラメータ(つまり構造関数)を遮断します.ここでは、配列のshift方法が元の配列を変更することに注意します.
  • Object.creatによりオブジェクトを作成し、Costruct.prototype
  • を継承する.
  • は、appyを通じて関数のthisを変更する方法で、構造関数のthis属性の値をオブジェクトに与え、
  • は、正則プラスタイプによって戻り値を判定する.
  • ここまでです.何か足りないところや間違いがあれば、指摘してください.ホームページ転送ゲート