Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象
object.defineProperty(obj, prop, descriptor)
configurable
当该属性的configurable为true时,改属性描述符才能被改变,(是否可以删除)默认为false
var obj = {};
Object.defineProperty(obj,'newKey',{
value: '22',
configurable: false
});
delete obj.newKey;
console.log(obj.newKey); //22
configurable 为false 无法删除 newkey
writable
属性的值是否可以被重写。设置为true可以被重写;设置为false,不能被重写。默认为false。
var obj = {};
Object.defineProperty(obj,'newKey',{
value: '22',
writable: true,
});
obj.newKey = 'hello';
console.log(obj.newKey); //hello
//当writable 为 true 时 打印hello false 为22
configurable 控制是否可以删除 writable 控制是否可以修改(赋值)
enumerable
此属性是否可以被枚举(使用for...in或Object.keys())。设置为true可以被枚举;设置为false,不能被枚举。默认为false
value
该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为undefined
存取描述符同时具有以下可选键值:
get
一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。当访问该属性时,该方法会被执行,方法执行时没有参数传入,但是会传入this对象(由于继承关系,这里的this并不一定是定义该属性的对象)。
默认为undefined
set
一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。当属性值修改时,触发执行该方法。该方法将接受唯一参数,即该属性新的参数值。
默认为undefined
网友评论