Object.defineProperty() 定义新属性和修改原有的属性
Object.defineProperty( obj,prop,descriptor)
翻译:对象.定义属性(对象,属性名必须是字符写法,{ value:所有 })
创建一个对象:
- var obj = {
- id:1,
- pname:'小米',
- price:1999
- } ;
以前的对象添加和修改属性方式:
- obj.num = 1000; //直接新添加属性
- obj.price = 99; //直接修改属性
- console.log(obj);
现在新的写法 添加属性:
- Object.defineProperty(obj,'num',{
- value:1000
- });
- console.log(obj);
现在新的写法 修改属性:
- Object.defineProperty(obj,'price',{
- value:9.9
- });
- console.log(obj);
限定死一个值,不允许修改: writable用法
- Object.defineProperty(obj,'id',{
- //如果值是false 不允许修改属性值,是true就可以修改
- writable:true,
- });
- obj.id = 2,
- console.log(obj);
-
-
- //是turn 可改 false不可改
判断是否可以被枚举,遍历 writable: true 可以允许遍历 ,false不允许
- Object.defineProperty(obj, 'address', {
- value: '凡科优向公司',
- writable: false,
- // enumerable:如果值是false 则不允许遍历,默认值是false
- enumerable: false
- });
-
- console.log(obj);
- console.log(Object.keys(obj));
判断是否可以被删除或者是是否可以再次修改特性ture\false 默认是false
configurable:true 可以允许删除 ,false不允许
- Object.defineProperty(obj, 'address', {
- value: '凡优向公司',
- writable: false,
- // enumerable:如果值是false 则不允许遍历,默认值是false
- enumerable: false,
- // configurable:如果值是false 则不允许删除这个属性,默认值是false
- configurable: false
- });
-
- console.log(obj);
- console.log(Object.keys(obj));
- delete obj.address;
- console.log(obj);
总结:例子中:如果是自己添加num,想可以获取属性forEash . key(obj) 中出现num,那么需要设置enumerable: true,才显示。
如果第一次已经设置我是为configurable: false,那后面在改成configurable: ture 会报错,告诉您不能重复修改特性。