對象.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
// }