📜  Javascript Object getOwnPropertyDescriptor()方法(1)

📅  最后修改于: 2023-12-03 15:16:06.092000             🧑  作者: Mango

Javascript Object getOwnPropertyDescriptor()方法

介绍

在 JavaScript 中,对象 (Object) 是指拥有属性的数据结构。每个属性都有一个名称 (name 或者 key) 和对应的值 (value),属性可以分为数据属性 (Data property) 和访问器属性 (Accessor property)。

Object.getOwnPropertyDescriptor() 方法可以获取某个对象自身属性的描述符 (包括数据属性和访问器属性),描述符是一个对象,包含以下属性:

  • value:该属性所对应的值,默认为 undefined
  • writable:如果该属性的值可以被修改,则为 true;否则为 false。默认值为 false
  • enumerable:如果该属性可以通过 for...in 循环访问到,则为 true;否则为 false。默认值为 false
  • configurable:如果该属性的描述符可以被更改、该属性可以被删除、以及该属性的值可以被修改,则为 true;否则为 false。默认值为 false
  • get:访问器属性的 getter 函数。默认值为 undefined
  • set:访问器属性的 setter 函数。默认值为 undefined
语法

Object.getOwnPropertyDescriptor(obj, prop)

  • obj:目标对象。
  • prop:要获取的属性名称。
返回值

如果指定的属性存在于传入的对象上,返回该属性的描述符对象;否则返回 undefined

示例
获取对象的数据属性描述符
const obj = {
  name: 'Tom',
  age: 18,
  sayHello() {
    console.log(`Hello ${this.name}!`);
  }
};

const nameDescriptor = Object.getOwnPropertyDescriptor(obj, 'name');
console.log(nameDescriptor);
// 输出:
// {
//   value: 'Tom',
//   writable: true,
//   enumerable: true,
//   configurable: true
// }

const ageDescriptor = Object.getOwnPropertyDescriptor(obj, 'age');
console.log(ageDescriptor);
// 输出:
// {
//   value: 18,
//   writable: true,
//   enumerable: true,
//   configurable: true
// }

const sayHelloDescriptor = Object.getOwnPropertyDescriptor(obj, 'sayHello');
console.log(sayHelloDescriptor);
// 输出:
// {
//   value: [Function: sayHello],
//   writable: true,
//   enumerable: true,
//   configurable: true
// }
获取对象的访问器属性描述符
const obj = {
  _name: 'Jack',
  get name() {
    return this._name;
  },
  set name(newName) {
    this._name = newName;
  }
};

const nameDescriptor = Object.getOwnPropertyDescriptor(obj, 'name');
console.log(nameDescriptor);
// 输出:
// {
//    get: [Function: get],
//    set: [Function: set],
//    enumerable: true,
//    configurable: true
// }
注意事项
  • Object.getOwnPropertyDescriptor() 方法只能获取对象自身属性的描述符,不能获取继承属性的描述符。
  • Object.defineProperty() 方法可用于修改或添加一个对象的属性,并且可以设置属性描述符。