對象.get屬性描述符()

對象.get屬性描述符

Object.getOwnPropertyDescriptor()

該方法返回給定對象自己的屬性(即直接存在於對象上而不是對象的原型鏈中的屬性描述符)。Object.getOwnPropertyDescriptor()

const object1 = {
  property1: 42

}

const descriptor1 = Object.getOwnPropertyDescriptor(object1, 'property1');

console.log(descriptor1.configurable);
// expected output: true

console.log(descriptor1.value);
// expected output: 42

語法

Object.getOwnPropertyDescriptor(obj, prop)

參數

obj
要在其中查找屬性的對象。
prop
要檢索其描述的屬性的名稱或符號。

返回值

給定屬性的屬性描述符(如果存在於對象上,則未定義。

描述

此方法允許檢查財產的精確描述。JavaScript 中的屬性由字符串值的名稱或Symbol和屬性描述符組成。有關屬性描述符類型及其屬性的詳細信息,請參閱Object.defineproperty()。

屬性描述符是具有以下一些屬性的記錄:

value
與屬性關聯的值(僅描述數據符)。
writable
true僅當可能更改與屬性關聯的值(僅限數據描述符)時。"
get
用作屬性獲取器的函數,如果沒有 getter(僅訪問符描述符)則未定義。
set
用作屬性的設定器的函數,如果沒有設置器(僅限訪問符描述符)則未定義。
configurable
true僅當此屬性描述符的類型可能更改,並且該屬性可以從相應的對象中刪除時。
enumerable
true僅當此屬性在枚舉相應對象的屬性期間出現時纔會出現。

var o, d;

o = { get foo() { return 17; } };
d = Object.getOwnPropertyDescriptor(o, 'foo');
// d is {
//   configurable: true,
//   enumerable: true,
//   get: /*the getter function*/,
//   set: undefined
// }

o = { bar: 42 };
d = Object.getOwnPropertyDescriptor(o, 'bar');
// d is {
//   configurable: true,
//   enumerable: true,
//   value: 42,
//   writable: true
// }

o = { [Symbol.for('baz')]: 73 }
d = Object.getOwnPropertyDescriptor(o, Symbol.for('baz')); 
// d is {
//   configurable: true,
//   enumerable: true,
//   value: 73,
//   writable: true
// }

o = {};
Object.defineProperty(o, 'qux', {
  value: 8675309,
  writable: false,
  enumerable: false
});
d = Object.getOwnPropertyDescriptor(o, 'qux');
// d is {
//   value: 8675309,
//   writable: false,
//   enumerable: false,
//   configurable: false
// }

筆記

在 ES5 中,如果此方法的第一個參數不是對象(基元),則它將導致TypeError。在 ES2015 中,非對象第一個參數將首先被強制到對象。

Object.getOwnPropertyDescriptor('foo', 0);
// TypeError: "foo" is not an object  // ES5 code

Object.getOwnPropertyDescriptor('foo', 0);
// Object returned by ES2015 code: {
//   configurable: false,
//   enumerable: true,
//   value: "f",
//   writable: false
// }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章