标签:修改 ESS config 直接 his property 默认 枚举 形式
Object.defineProperty()
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
Object.defineProperty(obj, prop, descriptor)
obj
prop
descriptor
{ enumerable: false, configurable: false, writable: false, value: "static" }
返回值 被传递给函数的对象。
其中参数descriptor
属性描述符有两种形式:数据描述符和存取描述符。
数据描述符是一个具有值的属性,该值可能是可写的,也可能不是可写的。
存取描述符是由getter-setter函数对描述的属性。描述符必须是这两种形式之一;不能同时是两者。
数据描述符同时具有以下可选键值:
value
undefined
。writable
writable
为true
时,value
才能被赋值运算符改变。默认为 false。存取描述符同时具有以下可选键值:
get
undefined
。当访问该属性时,该方法会被执行,方法执行时没有参数传入,但是会传入this
对象(由于继承关系,这里的this
并不一定是定义该属性的对象)。undefined
。set
undefined
。当属性值修改时,触发执行该方法。该方法将接受唯一参数,即该属性新的参数值。undefined
。数据描述符和存取描述符均具有以下可选键值(默认值是在使用Object.defineProperty()定义属性的情况下):
configurable
描述符
才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。enumerable
enumerable
为true
时,该属性才能够出现在对象的枚举属性中。默认为 false。如果你想了解如何使用Object.defineProperty
方法和类二进制标记语法,看看这篇文章。
var o = {}; // 创建一个新对象 // 在对象中添加一个属性与数据描述符的示例 Object.defineProperty(o, "a", { value : 37, writable : true, enumerable : true, configurable : true }); // 对象o拥有了属性a,值为37 // 在对象中添加一个属性与存取描述符的示例 var bValue; Object.defineProperty(o, "b", { get : function(){ return bValue; }, set : function(newValue){ bValue = newValue; }, enumerable : true, configurable : true }); o.b = 38; // 对象o拥有了属性b,值为38 // o.b的值现在总是与bValue相同,除非重新定义o.b // 数据描述符和存取描述符不能混合使用 Object.defineProperty(o, "conflict", { value: 0x9f91102, get: function() { return 0xdeadbeef; } }); // throws a TypeError: value appears only in data descriptors, get appears only in accessor descriptors
如果属性已经存在,Object.defineProperty()
将尝试根据描述符中的值以及对象当前的配置来修改这个属性。如果旧描述符将其configurable
属性设置为false
,则该属性被认为是“不可配置的”,并且没有属性可以被改变(除了单向改变 writable 为 false)。当属性不可配置时,不能在数据和访问器属性类型之间切换。
修改的方法跟创建是同一个函数
var o = {}; // 创建一个新对象 o.a = "hello"; //赋值属性 // 在对象中修改属性与数据描述符的示例 Object.defineProperty(o, "a", { value : 37, writable : true, enumerable : true, configurable : true }); //o.a被修改为37
详细的可以查看下面链接
参考资料
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
标签:修改 ESS config 直接 his property 默认 枚举 形式
原文地址:https://www.cnblogs.com/alummox/p/11470227.html