1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 18:32:22 +00:00

修改object.observe

This commit is contained in:
Ruan Yifeng 2014-11-20 17:59:33 +08:00
parent 29c88ee19e
commit dc6437d0b2
2 changed files with 40 additions and 5 deletions

View File

@ -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版起就已经支持

View File

@ -28,7 +28,8 @@
- Axel Rauschmayer, [Handling required parameters in ECMAScript 6](http://www.2ality.com/2014/04/required-parameters-es6.html)
- Axel Rauschmayer, [ECMAScript 6s new array methods](http://www.2ality.com/2014/05/es6-array-methods.html): 对ES6新增的数组方法的全面介绍
- Nicholas C. Zakas, [Creating defensive objects with ES6 proxies](http://www.nczonline.net/blog/2014/04/22/creating-defensive-objects-with-es6-proxies/)
- Addy Osmani, [Data-binding Revolutions with Object.observe()](http://www.html5rocks.com/en/tutorials/es7/observe/): 介绍Object.observer()的概念
- Addy Osmani, [Data-binding Revolutions with Object.observe()](http://www.html5rocks.com/en/tutorials/es7/observe/): 介绍Object.observe()的概念
- Sella Rafaeli, [Native JavaScript Data-Binding](http://www.sellarafaeli.com/blog/native_javascript_data_binding): 如何使用Object.observe方法实现数据对象与DOM对象的双向绑定
- Dmitry Soshnikov, [ES6 Notes: Default values of parameters](http://dmitrysoshnikov.com/ecmascript/es6-notes-default-values-of-parameters/): 介绍参数的默认值
- Mozilla Developer Network, [WeakSet](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet)介绍WeakSet数据结构
- Mathias Bynens, [Unicode-aware regular expressions in ES6](https://mathiasbynens.be/notes/es6-unicode-regex): 详细介绍正则表达式的u修饰符