Object.defineProperty() 的属性和用法

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

1、用法:

Object.defineProperty(obj, prop, descriptor)

obj:要在其上定义属性的对象。

prop:要定义或修改的属性的名称。

descriptor:将被定义或修改的属性描述符。

2、defineProperty 的属性:

如果对象中不存在指定的属性,Object.defineProperty()就创建这个属性。当描述符中省略某些字段时,这些字段将使用它们的默认值。拥有布尔值的字段的默认值都是falsevaluegetset字段的默认值为undefined

2.1、Configurable 特性

configurable特性表示对象的属性是否可以被删除,以及除writable特性外的其他特性是否可以被修改。

var obj = {};
obj.a = 1;
// 等同于 :
Object.defineProperty(obj, "a", {
  value : 1,
  writable : true,
  configurable : false, // false , defineProperty的其他属性不能被修改
  enumerable : true
});
Object.defineProperty(obj, 'a', {
    enumerable: false 
});
// 报错 Cannot redefine property: aat Function.defineProperty (<anonymous>)
// 无法重新定义属性:a at function.defineproperty

2.2、Enumerable 特性 (详情请点击 defineProperty的可枚举属性的定义,可枚举属性的设置以及可枚举属性的用处

 enumerable定义了对象的属性是否可以在 for...in 循环和 Object.keys() 中被枚举。

2.3、Writable 属性

扫描二维码关注公众号,回复: 5579629 查看本文章

writable属性设置为false时,该属性被称为“不可写”。它不能被重新分配。

// strict mode
(function() {
  'use strict';
  var o = {};
  Object.defineProperty(o, 'b', {
    value: 2,
    writable: false
  });
  o.b = 3; 
  // throws TypeError: Cannot assign to read only property 'b' of object '#<Object>'
  // 无法为对象“<object>的只读属性“b”赋值
  return o.b; // returns 2 without the line above
}());

2.4、参看MDN文档:Object.defineProperty() 详细介绍

猜你喜欢

转载自blog.csdn.net/lgysjfs/article/details/86594850
今日推荐