機能を実装する拡張

今、今日、私たちは機能を実装するために拡張してみましょう。

具体的なアイデア:使用Object.defineProperty()の特性は、属性記述子Object.getOwnPropertyDescriptorにより取得し、新しく作成されたオブジェクトに割り当てられた一連の属性、および()

コードを引き出しましょうよ

    Object.defineProperty(のObject.prototype、
         "拡張" 
        { 
            書き込み可能:trueに
            可算:falseに
            設定可能:trueに
            値:機能(O){
                 // すべてのプロパティが所有取得
                するvar名= Object.getOwnPropertyNames(O);
                 VARの I = 0; I ++; I <names.lengthの){
                     // もし属性がスキップ存在する
                    のIF(名前[I]  、これは続行// 属性記述子のSSの属性を取得
                    するvar DESC = ; Object.getOwnPropertyDescriptor(O、名前[I])
                    Object.defineProperty(この、名[I]、DESC)
                } 
            } 
        }             
    )を   

使用例:

  // 新しいオブジェクトを定義
    するvar A = { 
        :itemA。1 
    } 
    //は、新しい属性を作成し、属性記述セット 
    Object.defineProperty(A、 "itemB" 、{ 
        書き込み可能:trueに
        :列挙falseに
        :設定可能な真に
        値: 2 
    })
    // 新しいオブジェクトを定義
    するvar B = {} 
    (A)b.extendを
    // この時点で、我々は、静的プロパティが継承している見ることができる渡さ 
    にconsole.log(B)   // 結果{itemA:1、 itemB:2} 
    // も渡されていないプロパティ記述子を見て
    せextendDesc = Object.getOwnPropertyDescriptor(B、 "itemB" 
    はconsole.log(extendDesc)   // 结果为{値:2、書き込み可能:真、列挙:偽、設定:真}

さて、最後に、我々はどのようなアナログObject.create()関数を達成するために一緒に仕事をする機会を持っています

 

おすすめ

転載: www.cnblogs.com/suihang/p/11546419.html