我在整理javascript高級程序設(shè)計的筆記的時候看到面向?qū)ο笤O(shè)計那章,講到對象屬性分為數(shù)據(jù)屬性和訪問器屬性,我們平時用的js對象90%以上都只是用到數(shù)據(jù)屬性;我們向來講解下數(shù)據(jù)屬性和訪問器屬性到底是什么?
數(shù)據(jù)屬性:數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置,在這個位置可以讀取和寫入值.
訪問器屬性:訪問器屬性不包含數(shù)據(jù)值;他們包含一對getter和setter函數(shù)在讀取訪問器屬性時,會調(diào)用getter函數(shù),這個函數(shù)負責返回有效的值,在寫入訪問器屬性時,會調(diào)用setter函數(shù)并傳入新值.
這里介紹的重點是訪問器屬性,設(shè)置對象的訪問器屬性只能用es5的Object.defineProrerty()方法,如下例子:
var book={_year:2004,edition:1};Object.defineProperty(book,"year",{get:function () {return this._year},set:function (newValue) {if(newValue>2004){this._year=newValue;this.edition+=newValue-2004;}}});book.year=2005;alert(book.edition);//2console.log(book.year);//2005也就是當執(zhí)行book.year=2005的時候其實是執(zhí)行了year中的set方法,當執(zhí)行book.year的時候執(zhí)行了year的get方法;
var book={_year:2004,edition:1};Object.defineProperty(book,"year",{get:function () {console.log("year get")return this._year},set:function (newValue) {console.log("year set")if(newValue>2004){this._year=newValue;this.edition+=newValue-2004;}}});book.year=2005;alert(book.year);控制臺的提示是:

這個原理就是vue雙向數(shù)據(jù)綁定的原理,我們在vue組件中的data聲明屬性數(shù)據(jù)的時候其實在對象中的已經(jīng)將這個屬性封裝成了訪問器屬性.

每個屬性都有g(shù)et和set方法,在做雙向的數(shù)據(jù)的控制都在get和set方法中,因為無論你是在ready(2.0是mounted了)或是在view中改變值都會觸發(fā)set方法,將新值復制進去,在重新在view中匹配值,當然你們有更復雜的控制操作,get方法著是讓ready中獲取的這個屬性值一直保存最新值.
angular1的雙向數(shù)據(jù)綁定是臟數(shù)據(jù)監(jiān)測,簡單點說就是監(jiān)測新值和舊值有沒有變化,這種方式就要定時監(jiān)測了咯.兩種性能的消耗感覺不在一個層次上的啊.
就好比用html5 Sockets做后臺主動消息推送前端和用js定時器每個5秒發(fā)送請求到后臺捕獲消息的性能差距一樣.
import data from '../assets/js/data'export default{data(){return{menu:data.menu,inde:"",row:"",clomu:""}},computed:{isfull:function () {alert(111);return 11;}},mounted(){},methods:{domclick:function (i) {if(this.inde===i){this.inde="";}else {this.inde = i;}},subclick:function (i,o) {this.row=i;this.clomu=o;}}}以上所述是小編給大家介紹的Angular和Vue雙向數(shù)據(jù)綁定的實現(xiàn)原理(重點是vue的雙向綁定),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!
新聞熱點
疑難解答