9. ES5 之 Object.defineProperty(obj, prop, descriptor)
2016-04-29 16:32
435 查看
参数
1. 定义新属性newDataProperty
2. 参数value、writable、enumerable、configurable的使用(个人感觉目前项目中用处不大)
3. 关于set和get
一般用于数据和视图联动,mvvm框架的avalon.js、vue.js、angualar.js的双向数据绑定原理就是属性访问器。
不允许同一个属性存在两个及以上的存取访问器配置,所以writable或者value不能与get/set同时配置,否则报错。
Object obj目标对象
String prop需要定义的属性
Object descriptor该属性拥有的特性,可设置的值有:
value属性的值,默认为
undefined。
writable该属性是否可写,如果设置成
false,则任何对该属性改写的操作都无效(但不会报错),默认为
false。
get一旦目标对象访问该属性,就会调用这个方法,并返回结果。默认为
undefined。
set一旦目标对象设置该属性,就会调用这个方法。默认为
undeinfed。
configurable如果为false,则任何尝试删除目标属性或修改属性以下特性(writable, configurable, enumerable)的行为将被无效化,默认为
false。
enumerable是否能在for...in循环中遍历出来或在Object.keys中列举出来。默认为
false。
1. 定义新属性newDataProperty
var obj = { height: '180cm', age: 20 }; // 这里的newDataProperty是obj的属性 Object.defineProperty(obj, 'newDataProperty', { // value: 100, // writable: true, enumerable: true, configurable: true, get: function() { return document.getElementById('J_nickName').innerHTML; }, set: function(name) { document.querySelector('#J_nickName').innerHTML = name; } });
2. 参数value、writable、enumerable、configurable的使用(个人感觉目前项目中用处不大)
// value: newDataProperty作为obj的默认属性value为100 var defaultValue = obj.newDataProperty; // writable: 由于设置了writeable为true,所以newDataProperty的属性值仍为100 obj.newDataProperty = 101; // enumerable: 当enumberable的值为false时 newDataProperty无法被枚举 for (var key in obj) { console.log(obj[key]); } // configurable: 修改writable属性 Object.defineProperty(obj, 'newDataProperty', { writable : false }); var descriptor = Object.getOwnPropertyDescriptor(obj, 'newDataProperty'); console.log(descriptor);
3. 关于set和get
一般用于数据和视图联动,mvvm框架的avalon.js、vue.js、angualar.js的双向数据绑定原理就是属性访问器。
不允许同一个属性存在两个及以上的存取访问器配置,所以writable或者value不能与get/set同时配置,否则报错。
// get/set: newDataProperty属性取值 赋值会触发get和set方法 从而造成视图更新 obj.newDataProperty = 'sampson'
相关文章推荐
- addTarget参数含义||addTarget: action: forControlEvents:
- Objective-C runtime的常见应用
- Objective-C中 Self和 Super详解
- 在ASP.NET 2.0中操作数据之六:编程设置ObjectDataSource的参数值
- 浅谈objective-c
- objc_setAssociatedObject 使用(转)
- Caused by: java.lang.NullPointerException: Attempt to write to field 'int android.app.Fragment.mNextAnim' on a null object reference
- QMetaObject::invokeMethod: No such method的问题
- Map<String, ?>和Map<String, Object>的区别
- Objective-C runtime的常见应用
- Object-C高级编程读书笔记(6)—— GCD的一些函数
- OBJ-C实例变量修饰符;私有变量;私有方法;description;多态;点语法学习笔记
- OBJ-C组合模式学习笔记
- Hibernate之deleted object would be re-saved by cascade 异常的解决
- Objective-C 中随机数的用法(arc4random() 、random()、CCRANDOM_0_1()
- 在ASP.NET 2.0中操作数据:编程设置ObjectDataSource的参数值
- JSONObject解析json字符串实现
- TextField设置大全
- Objective-C:利用typedef为Block进行重命名
- 使用UIWebView时objective-c与javascript互相调用