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

  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; } 
});

猜你喜欢

转载自blog.csdn.net/qq_45891136/article/details/108017757
今日推荐