而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