js中的訪問器屬性中的getter和setter函數實現資料雙向繫結

來源:互聯網
上載者:User

標籤:innerhtml   首頁   his   返回   屬性   綁定   利用   訪問   雙向   

  嗯,之前在讀js紅寶書的時候,在對象那一章有介紹屬性類型。第一種資料類型指的是資料屬性,第二種是訪問器屬性。在初識vue的時候,其雙向資料繫結也是基於訪問器屬性中的getter和setter函數原理來實現的。本篇文章就著重解析這兩個函數的工作原理。

  • 首先,我們先建立一個a對象,並給他定義了一個預設的屬性_b,_b前面的底線是一種常用的記號,用於表示只能通過對象方法訪問的屬性。
var a={
  _b=5;
};
  • 接著定義一個屬性為‘c‘的訪問器屬性,該屬性包含一個get和set函數,get函數用來返回_b的值,set函數用來計算經處理過的_b的值,注意,訪問器屬性不能直接定義,必須使用Object.defineProperty()來定義。
1 Object.defineProperty(a,‘c‘,{2     get:function(){3         this._b=this._b-14         return this._b;5     },    6     set:function(newValue){7         return this._b=newValue;8     }9 })
   console.log(a.c) //4
     console.log(a.c) //3
   a.c=10;
  console.log(a._b,a.c);//10 9

  當我們第一次讀取a.c的時候,首頁會進入get函數,get函數裡面會返回4這個值,當第二次讀取a.c的值,get函數返回3。

  接著,設定a.c=10,進set函數設定a._b的值,此時a._b的值為10,然後進入get函數,讀取get函數,a._b的值變成9;

  • 利用這個原理,實現一個low版本的雙向資料繫結,代碼如下
 1 <body> 2         <input type="text" id="inputs"/> 3         <span id="span"></span> 4         <script type="text/javascript"> 5              6             var j={ 7                 val:‘‘ 8             } 9             Object.defineProperty(j,‘value‘,{10                 get:function(){11                     return this.val;12                 },13                 set:function(newValue){14                     this.val=newValue;15                 }16             })17             inputs.onkeyup=function(){18                 j.value=this.value;19                 span.innerHTML=j.val;20             }21         </script>22     </body>

  有興趣的同學可以嘗試做一下領悟。附上紅寶書此知識點在P143。

js中的訪問器屬性中的getter和setter函數實現資料雙向繫結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.