Object.defineProperty(obj, prop, descriptor)
obj
要在其上定义属性的对象;
prop
要定义或修改的属性的名称;
descriptor
将被定义或修改的属性描述符。
该方法允许精确添加或修改对象的属性。通过赋值操作添加的普通属性是可枚举的,能够在属性枚举期间呈现出来(for...in
或 Object.keys
方法), 这些属性的值可以被改变,也可以被删除。这个方法允许修改默认的额外选项(或配置)。默认情况下,使用 Object.defineProperty()
添加的属性值是不可修改的。
descriptor
)对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个具有值的属性,该值可能是可写的,也可能不是可写的。存取描述符是由getter-setter函数对描述的属性。描述符必须是这两种形式之一;不能同时是两者。
数据描述符和存取描述符均具有以下可选键值:
configurable
描述符
才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。enumerable
enumerable
为true
时,该属性才能够出现在对象的枚举属性中。默认为 false。数据描述符同时具有以下可选键值:
value
undefined
。writable
writable
为true
时,value
才能被赋值运算符改变。默认为 false。存取描述符同时具有以下可选键值:
get
undefined
。当访问该属性时,该方法会被执行,方法执行时没有参数传入,但是会传入this
对象(由于继承关系,这里的this
并不一定是定义该属性的对象)。undefined
。set
undefined
。当属性值修改时,触发执行该方法。该方法将接受唯一参数,即该属性新的参数值。undefined
。描述符可同时具有的键值
configurable | enumerable | value | writable | get | set | |
数据描述符 | Yes | Yes | Yes | Yes | No | No |
存取描述符 | Yes | Yes | No | No | Yes | Yes |
如果一个描述符不具有value,writable,get 和 set 任意一个关键字,那么它将被认为是一个数据描述符。如果一个描述符同时有(value或writable)和(get或set)关键字,将会产生一个异常。
出处:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
更多具体用法参照 :https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
原文:https://www.cnblogs.com/xiaosongJiang/p/10850394.html