在 JavaScript 中,Object.getOwnPropertyDescriptor() 方法用于 返回 指定 对象 上一个自有 属性 对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)
Object.getOwnPropertyDescriptor(obj, prop);
参数 | 描述 |
---|---|
obj | 需要查找的目标对象。 |
prop | 目标对象内属性名称。 |
数据描述符 | 说明 |
---|---|
configurable | 当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。 |
enumerable | 当且仅当该属性的 enumerable 为 true 时,该属性才能够出现在对象的枚举属性中。默认为 false。 |
value | 该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。 |
writable | 当且仅当该属性的 writable 为 true 时,value 才能被赋值运算符改变。默认为 false。 |
get | 一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。当访问该属性时,该方法会被执行,方法执行时没有参数传入,但是会传入 this 对象(由于继承关系,这里的this并不一定是定义该属性的对象)。 默认为 undefined。 |
set | 一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。当属性值修改时,触发执行该方法。该方法将接受唯一参数,即该属性新的参数值。 默认为 undefined。 |
如果指定的属性存在于对象上,则返回其属性描述符对象(property descriptor),否则返回 undefined。
使用 Object.getOwnPropertyDescriptor 获取对象属性描述符
<!DOCTYPE html>
<html>
<head>
<title>JavaScript Object.getOwnPropertyDescriptor获取属性描述符对象</title>
<script type="text/javascript">
console.log("嗨客网(www.haicoder.net)");
function createPerson(name, age, sex){
var person = new Object();
person.name = name;
person.age = age;
person.sex = sex;
person.sayHi = function(){
console.log("I am", this.name, "i am", this.age, "years old", "and my sex is", this.sex);
}
return person;
}
var person = createPerson("HaiCoder", 109, "F");
var nameDescriptor = Object.getOwnPropertyDescriptor(person, "name");
console.log("nameDescriptor =", nameDescriptor);
var ageDescriptor = Object.getOwnPropertyDescriptor(person, "age");
console.log("ageDescriptor =", ageDescriptor);
var sexDescriptor = Object.getOwnPropertyDescriptor(person, "sex");
console.log("sexDescriptor =", sexDescriptor);
</script>
</head>
</html>
程序运行后,控制台输出如下:
我们首先创建了一个 person 对象,该对象有三个属性,即 name 、age 和 sex,最后,我们使用 getOwnPropertyDescriptor 分别获取了属性 name 、age 和 sex 的属性描述符信息。
我们可以看到,这三个属性的 writeable、enumerable 和 configurable 属性都为 true,即都是默认值。
在 JavaScript 中,Object.getOwnPropertyDescriptor() 方法用于返回指定对象上一个自有属性对应的属性描述符。