jsはデーターバインディングを実現する

1661 ワード

コードを作成する前に、まずデータバインディングについて知っておく必要がある知識を知りに来ました.
  • getterとsetterは、javaScriptのオブジェクトが健値ペアのセットであることを知っています.ES 5では一つまたは二つの方法を使って代替できます.この二つの方法はgetterとsetterです.これらの2つの方法で定義される属性は「メモリ属性」と呼ばれ、データ属性とは違って1つの値しかない.下のコードを見てください.
    const obj = {
      name:'  ',
    };
    obj.name ;//    
    obj.name = ‘  ’;
    
    よく使われている操作は正しいです.ゲッターとセッターを使っていません.もしゲッターとセットを使うなら、コードはどうなりますか?続けて見ます.
    const obj = {
      get  name(){.....},
      set  name(){.....},
    };
    
    二つの方法で元の値に取って代わると、この二つの方法はどう使いますか?
    const obj = {
     _name:'  ',
      get  name(){
        return this._name;
      },
      set  name(value){
        this._name = value;
      },
    };
    obj.name //  
    obj.name =''  ’;
    obj.name //  ’
    
    ここを見たら、どうやって運行されているのか分かりますよね.set、get方法によって無限の可能性を創造できます.しかし、一般的にはgetとsetはペアで出現します.getだけが読めば、setだけ書くことができます.
  • Object.defineProperty()Object.defineProperty(obj,prop,descriptor)メソッドは、オブジェクトに直接新しい属性を定義したり、オブジェクトの既存属性を修正したりして、このオブジェクトに戻ります.
  • 属性を定義するオブジェクト
  • 定義または変更する属性の名前
  • は、属性に関する定義または修正された属性記述子の説明を、descriptorを参照してください.私たちのデータ双方向バインディングの実現はObject.definePropertyから完全に来ています.
  • 
    -----------------------------
    const obj = {};
    Object.defineProperty(obj, 'name', {
          get() {
            return document.getElementsByTagName('input')[0].value;
          },
          set(value) {
            document.getElementsByTagName('input')[0].value = value;
          },
          configurable: true
     });
    document.getElementsByTagName('input')[0].onchange = function () {
          console.log('obj', obj.name);
     }
    
    以上はデータバインディングの簡単な実現を実現しました.なぜie 8以下は直接3つのフレームを使用できないのか分かりました.