您的位置:首页 > 移动开发 > Objective-C

Object.defineProperty()方法的解释及使用

2020-08-15 09:48 417 查看 https://blog.csdn.net/qq_45891
  1. 什么是Object.defineProperty()?

Object.defineProperty()方法会直接在一个对象上定义一个新属性,或修改一个对象的现有属性,并返回对象。

注意:应当直接在 Object 构造器对象上调用此方法,而不是在任意一个 Object 类型的实例上调用。
var object = {};
Object.defineProperty(object,'name',{
value:'lh',
writable:false
});
Object.name = 'zs';
console.log(object.name);//结果还为lh
  1. Object.defineProperty()的内置参数有哪些?
Object.defineProperty(obj, prop, descriptor)

obj:要定义属性的对象。
prop:要定义或修改的属性的名称或 Symbol 。
descriptor:要定义或修改的属性描述符。

返回值是传递给参数的对象

  1. 有哪些可选键值?

该方法允许精确地添加或修改对象的属性。通过赋值操作添加的普通属性是可枚举的,在枚举对象属性时会被枚举到(for…in 或 Object.keys 方法),可以改变这些属性的值,也可以删除这些属性。

configurable

当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。
默认为 false。

enumerable

当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。
默认为 false。
数据描述符还具有以下可选键值:

value

该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。
默认为 undefined。

writable

当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的 value,才能被赋值运算符改变。
默认为 false。

  1. 创建属性

如果对象中不存在指定的属性,Object.defineProperty() 会创建这个属性。当描述符中省略某些字段时,这些字段将使用它们的默认值。

var object = {}; // 创建一个新对象

// 在对象中添加一个属性与数据描述符的示例
Object.defineProperty(object, "a", {
value : 37,
writable : true,
enumerable : true,
configurable : true
});

// 对象 object 拥有了属性 a,值为 37

// 在对象中添加一个设置了存取描述符属性的示例
var bValue = 38;
Object.defineProperty(object, "b", {
// 使用了方法名称缩写(ES2015 特性)
// 下面两个缩写等价于:
// get : function() { return bValue; },
// set : function(newValue) { bValue = newValue; },
get() { return bValue; },
set(newValue) { bValue = newValue; },
enumerable : true,
configurable : true
});

object.b; // 38
// 对象 object 拥有了属性 b,值为 38
// 现在,除非重新定义 object.b,object.b 的值总是与 bValue 相同

// 数据描述符和存取描述符不能混合使用
Object.defineProperty(object, "conflict", {
value: 0x9f91102,
get() { return 0xdeadbeef; }
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: