首页常见问题正文

Object.defineProperty怎么用?有哪三个参数?作用分别是什么?

更新时间:2023-06-09 来源:黑马程序员 浏览量:

IT培训班

  Object.defineProperty()是JavaScript中的一个方法,用于定义或修改对象的属性。它允许你精确地控制属性的特性(如可写性、可枚举性和可配置性)。

  Object.defineProperty() 方法接受三个参数:

  1.对象(Object)

  要定义或修改属性的对象。

  2.属性名(Property name)

  一个字符串,表示要定义或修改的属性的名称。

  3.属性描述符(Property descriptor)

  一个对象,描述要定义或修改的属性的特性。

  属性描述符对象包含以下可选属性:

  ·value:属性的值。默认为 undefined。

  ·writable:属性的可写性。如果为 true,属性的值可以被修改;如果为 false,属性的值不可修改。默认为 false。

  ·enumerable:属性的可枚举性。如果为 true,属性可以通过 for...in 循环或 Object.keys() 方法枚举到;如果为 false,属性不可枚举。默认为 false。

  ·configurable:属性的可配置性。如果为 true,属性的特性可以被修改或属性可以被删除;如果为 false,属性的特性不可修改且属性不可删除。默认为 false。

  接下来我们看一个使用Object.defineProperty()的示例:

const obj = {};

Object.defineProperty(obj, 'name', {
  value: 'John',
  writable: false,
  enumerable: true,
  configurable: true
});

console.log(obj.name); // 输出: John
obj.name = 'Jane'; // 因为 writable 为 false,所以此赋值操作无效
console.log(obj.name); // 输出: John

for (let key in obj) {
  console.log(key); // 输出: name
}

delete obj.name; // 因为 configurable 为 true,所以可以删除属性
console.log(obj.name); // 输出: undefined

  在上述示例中,通过Object.defineProperty()方法定义了一个名为name的属性,它的值为 'John',不可修改(writable: false),可枚举(enumerable: true),可配置(configurable: true)。最后,我们演示了对该属性的访问、赋值、枚举和删除操作,并解释了属性描述符的作用。

分享到:
在线咨询 我要报名
和我们在线交谈!