首页常见问题正文

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

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

IT培训班

  Object.defineProperty 是 JavaScript 中用于定义或修改对象属性的方法。它接受三个参数,分别是:

  1.对象 (obj)

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

  2.属性名称 (prop)

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

  3.属性描述符 (descriptor)

  一个包含属性特性的对象。

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

  ·value: 属性的值。

  ·writable: 如果为 true,属性的值可以被赋值运算符改变。默认为 false。

  ·enumerable: 如果为 true,属性可以通过 for...in 循环或 Object.keys 枚举。默认为 false。

  ·configurable: 如果为 true,属性可以被删除,以及属性的特性可以被修改。默认为 false。

  ·get: 作为属性的 getter 函数,当访问属性时会调用该函数。

  ·set: 作为属性的 setter 函数,当设置属性值时会调用该函数。

  以下是使用 Object.defineProperty 的示例:

const obj = {};

// 定义一个可写的属性
Object.defineProperty(obj, 'name', {
  value: 'John',
  writable: true,
  enumerable: true,
  configurable: true
});

console.log(obj.name); // 输出: John

obj.name = 'Jane';
console.log(obj.name); // 输出: Jane

// 定义一个只读的属性
Object.defineProperty(obj, 'age', {
  value: 30,
  writable: false,
  enumerable: true,
  configurable: false
});

console.log(obj.age); // 输出: 30

obj.age = 40; // 尝试修改属性值,但会被忽略
console.log(obj.age); // 输出: 30

// 定义一个具有 getter 和 setter 的属性
Object.defineProperty(obj, 'fullName', {
  get: function() {
    return this.name + ' Doe';
  },
  set: function(value) {
    const parts = value.split(' ');
    this.name = parts[0];
  },
  enumerable: true,
  configurable: true
});

console.log(obj.fullName); // 输出: John Doe

obj.fullName = 'Jane Smith';
console.log(obj.name); // 输出: Jane
console.log(obj.fullName); // 输出: Jane Doe

  通过Object.defineProperty,我们可以灵活地定义和修改对象的属性,并指定属性的特性。

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