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

Object.defineProperty 是 JavaScript 中用于定义或修改对象属性的方法。它接受三个参数,分别是:
要定义或修改属性的对象。
要定义或修改的属性名称。
一个包含属性特性的对象。
属性描述符对象 (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,我们可以灵活地定义和修改对象的属性,并指定属性的特性。