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