当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


JavaScript Object.defineProperty()用法及代码示例


JavaScript Object.defineProperty() 方法添加或修改对象的现有属性并返回该对象。

用法:

Object.defineProperty(obj, prop, descriptor)

defineProperty() 方法是静态方法,使用Object 类名调用。

defineProperty()参数

defineProperty() 方法包含:

  • obj - 要在其上定义属性的对象。
  • prop - 要定义或修改的属性的名称或 Symbol
  • descriptor - 正在定义或修改的属性的说明符。

对象中存在的属性说明符有两种类型:数据说明符和访问器说明符。它们可以具有以下可选属性。

  • configurable
  • enumerable

数据说明符还可以具有:

  • value
  • writable

访问器说明符还可以具有:

  • get
  • set

defineProperty() 的返回值

  • 返回传递给函数的对象。

注意:

  • 默认情况下,使用 Object.defineProperty() 添加的值是不可变的且不可枚举的。
  • 如果说明符既没有value , writable , get 也没有set 键,则将其视为数据说明符。如果说明符同时具有 valuewritablegetset 键,则会引发异常。

示例:向对象添加数据属性

let obj = {};

// with a data property descriptor
Object.defineProperty(obj, "property1", {
  value: 788,
  writable: true,
  enumerable: true,
  configurable: true,
});

console.log(obj.property1); // 788

// with an accessor property descriptor
Object.defineProperty(obj, "property2", {
  get() {
    console.log("Getting Value...");
    return val;
  },
  set(newVal) {
    console.log("Setting Value...");
    val = newVal;
  },
  enumerable: true,
  configurable: true,
});

obj.property2 = 6969; // Setting Value...

console.log(obj.property2); // 6969

输出

788
Setting Value...
Getting Value...
6969

我们不能同时混合数据和访问器属性说明符,因为它会引发错误。

要修改属性,对象的 writable 属性必须是 true ,否则在严格模式下它不会修改并抛出错误。

enumerable 属性属性定义属性是由 Object.assign() 还是由扩展运算符选取。

configurable 属性同时控制是否可以从对象中删除属性以及是否可以更改其属性(valuewritable 除外)。

相关用法


注:本文由纯净天空筛选整理自 Javascript Object.defineProperty()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。