Object.defineProperty()
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
注意:应当直接在 Object
构造器对象上调用此方法,而不是在任意一个 Object
类型的实例上调用。
1.语法
Object.defineProperty(obj, prop, descriptor)
2.参数
@obj 要定义属性的对象
@prop 要定义或修改的属性的名称
@descriptor 要定义或修改的属性描述符
3.描述符(descriptor)的具体参数
数据描述符
@configurable - 默认为 false
当且仅当该属性的 configurable
键值为 true
时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除
@enumerable - 默认为 false
当且仅当该属性的 enumerable
键值为 true
时,该属性才会出现在对象的枚举属性中
@value - 默认为 undefined
该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)
@writable - 默认为 false
当且仅当该属性的 writable
键值为 true
时,属性的值,也就是上面的 value
,才能被赋值运算符
改变
存取描述符
@get - 默认为 undefined
属性的 getter 函数,如果没有 getter,则为 undefined
。当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 this
对象(由于继承关系,这里的this
并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值
@set - 默认为 undefined
属性的 setter 函数,如果没有 setter,则为 undefined
。当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的 this
对象
注意:当使用了getter或setter方法,不允许使用writable和value这两个属性(如果使用,会直接报错)