new observer();
new observer();
// 要實現的結果如下:
data
.name // 你訪問了 name
data
.age =
100; // 你設定了 age,新的值為100
data
.university // 你訪問了 university
data
.major =
'science'
// 你設定了 major,新的值為 science
實現這樣的乙個 observer,要求如下:
傳入引數只考慮物件,不考慮陣列。
new observer返回乙個物件,其 data屬性要能夠訪問到傳遞進去的物件。
通過 data 訪問屬性和設定屬性的時候,均能列印出對應的資訊。
如果傳入引數物件是乙個「比較深」的物件(也就是其屬性值也可能是物件),那該怎麼辦。
要實現上述目標,首先要定義乙個物件的建構函式,然後定義原型方法,遍歷物件本身的各個屬性,並為每個屬性繫結get和set方法。考慮到第4個問題,在程式中加入了遞迴的思想。
實現**如下:
// 首先定義觀察者建構函式
function
observer
(data)
// walk()函式用於深層次遍歷物件的各個屬性
// 採用的是遞迴的思路
// 因為我們要為物件的每乙個屬性繫結get和set
observer.prototype.walk = function
(obj)
this.convert(key,val);}}
};// 以自定義get和set函式
observer.prototype.convert = function
(key,val),
set:function
(newval);
val = newval;}})
};let data=,
address: "成都"
};
如上圖所示:無論是訪問乙個簡單值或者是乙個深層次的物件,都可以很好響應getter 和 setter。
Vue如何實現資料雙向繫結
說明 index.html lang en head p p v text msg p v text car.color p v html msg p v html car.color p type text v model msg v on click clickfn 點我button div...
vue如何實現雙向資料繫結?
vue中實現資料繫結的乙個重要點 text id a b span var obj object.defineproperty obj,test 需要新增keyup事件去監聽,不然就不知道已經發生了改變。document.addeventlistener keyup function e scrip...
vue實戰學習教程1 監聽 樣式繫結 篩選過濾排序
vue中計算 監聽 樣式繫結 style 篩選 過濾 排序等,歸納總結了一下。bgblue bgyellow style head myvue v for s,index in students click deletestudensindex index 刪除button click updeta...