一、语法
1.obj 要定义属性的对象。
2.prop 要定义或修改的属性的名称或 Symbol 。
3.descriptor 要定义或修改的属性描述符。
Object.defineProperty(obj, prop, descriptor)
二、结构
例一:
例一:
var obj = {}; // 创建一个新对象
// 在对象中添加一个属性与数据描述符的示例
Object.defineProperty(obj, "key", {
value : 37,
writable : true,
enumerable : true,
configurable : true
});
例二:
var obj = {}; // 创建一个新对象
// 在对象中添加一个属性与数据描述符的示例
Object.defineProperty(obj, "key", {
enumerable: false,
configurable: false,
writable: false,
value: "static"
});
1.configurable当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。
2.enumerable当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。默认为 false。
3.value该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。
4.writable当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的 value,才能被赋值运算符 (en-US)改变。默认为 false。
例二:
var obj = {}; // 创建一个新对象
var bValue = 38;
Object.defineProperty(obj, "key", {
get : function() { return bValue; },
set : function(newValue) { bValue = newValue; },
enumerable : true,
configurable : true
});
1.get属性的 getter 函数,如果没有 getter,则为 undefined。当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 this 对象该函数的返回值会被用作属性的值。默认为undefined。
2.set属性的 setter 函数,如果没有 setter,则为 undefined。当属性值被修改时,会调用此函数。该方法接受一个参数,会传入赋值时的 this 对象。默认为 undefined。