Object.defineProperty方法的作用
Object.defineProperty() 定义对象中新属性或修改原有的属性。
语法:
Object.defineProperty(obj, prop,descriptor)
-
obj:必需。目标对象
-
prop:必需。需定义或修改的属性的名字
-
descriptor:必需。目标属性所拥有的特性
Object.defineProperty() 第三个参数 descriptor 说明:以对象形式 { } 书写
-
value: 设置属性的值 默认为undefined
-
writable: 值是否可以重写。true | false 默认为false
-
enumerable: 目标属性是否可以被枚举。true | false 默认为 false
-
configurable: 目标属性是否可以被删除或是否可以再次修改特性 true | false 默认为false
例如:
var obj = {
id:1,
pname:'小米',
price:1999
};
//1、以前增加、修改对象属性的方法
// obj.num = 1000; //新增
// obj.price = 99; //修改
//2、Object.defineProperty() 定义属性或修改原有属性
//新增
Object.defineProperty(obj, 'num', {
value:1000
});
//修改
Object.defineProperty(obj, 'price', {
value:99
});
Object.defineProperty(obj, 'id', {
//如果只为 false 不允许修改这个属性值 默认值也是false
writable:false
})
obj.id = 10; //修改失败
//新增不可枚举的地址属性
Object.defineProperty(obj, 'address', {
value:'武汉市武昌区',
writable:false,
enumerable:false, //enumerable如果值为false 则不允许遍历 默认值是false
configurable:false // configurable:false 表示不允许删除和修改第三个参数里面的特性 默认值是true
});
delete obj.address; //删除失败
delete obj.pname; //删除失败
console.log(obj);
console.log(Object.keys(obj));