mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2024-04-21 12:32:22 +00:00
修改object.observe
This commit is contained in:
+38
-4
@@ -391,6 +391,42 @@ Object.observe方法用来监听对象(以及数组)的变化。一旦监听
|
||||
|
||||
```javascript
|
||||
|
||||
var user = {};
|
||||
Object.observe(user, function(changes){
|
||||
changes.forEach(function(change) {
|
||||
user.fullName = user.firstName+" "+user.lastName;
|
||||
});
|
||||
});
|
||||
|
||||
user.firstName = 'Michael';
|
||||
user.lastName = 'Jackson';
|
||||
user.fullName // 'Michael Jackson'
|
||||
|
||||
```
|
||||
|
||||
上面代码中,Object.observer方法监听user对象。一旦该对象发生变化,就自动生成fullName属性。
|
||||
|
||||
一般情况下,Object.observe方法接受两个参数,第一个参数是监听的对象,第二个函数是一个回调函数。一旦监听对象发生变化(比如新增或删除一个属性),就会触发这个回调函数。很明显,利用这个方法可以做很多事情,比如自动更新DOM。
|
||||
|
||||
```javascript
|
||||
|
||||
var div = $("#foo");
|
||||
|
||||
Object.observe(user, function(changes){
|
||||
changes.forEach(function(change) {
|
||||
var fullName = user.firstName+" "+user.lastName;
|
||||
div.text(fullName);
|
||||
});
|
||||
});
|
||||
|
||||
```
|
||||
|
||||
上面代码中,只要user对象发生变化,就会自动更新DOM。如果配合jQuery的change方法,就可以实现数据对象与DOM对象的双向自动绑定。
|
||||
|
||||
回调函数的changes参数是一个数组,代表对象发生的变化。下面是一个更完整的例子。
|
||||
|
||||
```javascript
|
||||
|
||||
var o = {};
|
||||
|
||||
function observer(changes){
|
||||
@@ -406,9 +442,7 @@ Object.observe(o, observer);
|
||||
|
||||
```
|
||||
|
||||
上面代码中,Object.observe方法监听一个空对象o,一旦o发生变化(比如新增或删除一个属性),就会触发回调函数。
|
||||
|
||||
Object.observe方法指定的回调函数,接受一个数组(changes)作为参数。该数组的成员与对象的变化一一对应,也就是说,对象发生多少个变化,该数组就有多少个成员。每个成员是一个对象(change),它的name属性表示发生变化源对象的属性名,oldValue属性表示发生变化前的值,object属性指向变动后的源对象,type属性表示变化的种类。基本上,change对象是下面的样子。
|
||||
参照上面代码,Object.observe方法指定的回调函数,接受一个数组(changes)作为参数。该数组的成员与对象的变化一一对应,也就是说,对象发生多少个变化,该数组就有多少个成员。每个成员是一个对象(change),它的name属性表示发生变化源对象的属性名,oldValue属性表示发生变化前的值,object属性指向变动后的源对象,type属性表示变化的种类。基本上,change对象是下面的样子。
|
||||
|
||||
```javascript
|
||||
|
||||
@@ -448,4 +482,4 @@ Object.unobserve(o, observer);
|
||||
|
||||
```
|
||||
|
||||
注意,Object.observe和Object.unobserve这两个方法不属于ES6,而是属于ES7的一部分,Chrome 36已经开始支持了。
|
||||
注意,Object.observe和Object.unobserve这两个方法不属于ES6,而是属于ES7的一部分。不过,Chrome浏览器从33版起就已经支持。
|
||||
|
||||
Reference in New Issue
Block a user