而vue.js主要利用了accessor descriptors的set和get來更新視圖,這裏看到的這個例子挺好,是一個簡單的綁定。
對於一個html頁面javascript
<div> <p>你好,<span id='nickName'></span></p> <div id="introduce"></div> </div>
設置一個數據的屬性的getter和setterhtml
//視圖控制器 var userInfo = {}; Object.defineProperty(userInfo, "nickName", { get: function(){ return document.getElementById('nickName').innerHTML; }, set: function(nick){ document.getElementById('nickName').innerHTML = nick; } }); Object.defineProperty(userInfo, "introduce", { get: function(){ return document.getElementById('introduce').innerHTML; }, set: function(introduce){ document.getElementById('introduce').innerHTML = introduce; } })
而後就能愉快地綁定數據交互了。vue
userInfo.nickName = "xxx"; userInfo.introduce = "我是xxx,我來自雲南,..."
可是,這個例子只是數據和dom節點的綁定,而vue.js更爲複雜一點,它在網頁dom和accessor之間會有兩層,一層是Wacher,一層是Directive,好比如下代碼。java
var a = { b: 1 } var vm = new Vue({ data: data })
a.b =1
,setter就會從新通知Watcher進行變更,Watcher再通知Directive對dom節點進行更改。
(原文地址:http://www.jianshu.com/p/07ba2b0c8fca)dom