手書きヴュー(1)ハイジャックの配列

1.私たちは、ファイルを書き換えます 

array.jsを作成します

すべてのメソッドの配列を取得2。 

oldArrayProtoMethods = Array.prototypeをしましょう。

)(新しいメソッドObject.createを作成します3。 

Object.create()メソッドを作成する新しいオブジェクト、__proto__の新しく作成されたオブジェクトを提供するために、既存のオブジェクトを使用して
古い方法で発見されるオブジェクトの新しいコピー 
輸出はarrayMethod = Object.create(oldArrayProtoMethods)しましょう。

 

ステートメント7に記載の方法 

 

 

聞かせて方法= [
   プッシュポップアンシフトシフトソートスプライス
]

 

6.そのアレイ書き換え動作を添加する方法  

methods.forEach(METHOD => { 
  にconsole.log(方法)
  arrayMethod [方法] = 関数(...引数){ 
    LETのR&LT = oldArrayProtoMethods [方法] .apply(この、引数)
    にconsole.log(' コールデータを更新方法' 
  } 
})

arrayMethodを指すように、このポイントを変更する方法は元の配列を取得するための反復法

7.これらのメソッドは、マウント配列のプロトタイプを作成します

IF (Array.isArray(データ)){
       // もインターセプトに観察アレイ法必要各アレイの1つの項目だけ 
      にconsole.log(モニタアレイ
      data._proto = arrayMethodを
    }

8.試験

index.js

輸入ヴューから ../source/src/index ; 
せVM = 新しいヴュー({ 
  EL:' #app ' 
  データ(){ 
    リターン{ 
      MSG:' こんにちは' 
      学校:{ 
        名:' ZF ' 
        年齢:10 
      }、
      ARR:[ 123 ] 
    } 
  }、
  計算:{ 

  }、
  時計:{ 

  } 
})
vm.arr.push( 1111 
はconsole.log(vm.arr)   // ハロー

9.テスト結果

 

 

 

配列に10.pushは、私たちが待機する項目の配列内のオブジェクトをすべき標的となりうる

まず、明確なだけで私たちはこれらの方法で聞くために持っているので、新機能のアレイを有するアンシフトスライスを押します 

挿入してみましょう。
    スイッチ(キー){
       ケース プッシュケース 抜き
        挿入 = argsが
         壊れます
       ケース「スプライス」:
      // 获取新增的 
        挿入= args.slice(2 ブレークデフォルト休憩; 
    } 
    であれば(挿入)observerArray(挿入)

新しいアレイに各観察項目を追加するために、アレイを介して前記トラバースモニタループ

エクスポート機能observerArray(挿入){
   ための(iは=せ0を I ++; I <inserted.length ){ 
    ([I]挿入)観察
  } 
}

12.アレイ観察observer.jsの各エントリ

    // 各配列エントリ観測 
      observerArray(データ)

13.試験

index.js

輸入ヴューから ../source/src/index ; 
せVM = 新しいヴュー({ 
  EL:' #app ' 
  データ(){ 
    リターン{ 
      MSG:' こんにちは' 
      学校:{ 
        名:' ZF ' 
        年齢:10 
      }、
      ARR:[ 123 ] 
    } 
  }、
  計算:{ 

  }、
  時計:{ 

  } 
})
vm.arr.push({:1 })
はconsole.log(vm.arr [ 3 ] .A)   // ハロー

14.試験結果 

 

クラウドコード:https://gitee.com/guangzhou110/handwritten_vue/tree/master/vue%20%E6%95%B0%E7%BB%84%E5%8A%AB%E6%8C%81

おすすめ

転載: www.cnblogs.com/guangzhou11/p/12663036.html