1. 程式人生 > 其它 >Object函式的內建方法 Object.getOwnPropertyDescriptor

Object函式的內建方法 Object.getOwnPropertyDescriptor

一、定義

Object.getOwnPropertyDescriptor()方法獲取指定物件指定的自有屬性的屬性描述符。

二、語法

Object.getOwnPropertyDescriptor(obj, prop);

引數

obj:要獲取的物件

prop:要獲取的自有屬性的屬性名(字串)

返回

如果prop是obj的自有屬性,則返回屬性描述符物件。如果prop不存在或非自有屬性,則返回undefined。

該方法允許對一個屬性的描述進行檢索。在 Javascript 中,屬性由一個字串型別的“名字”和一個“屬性描述符”物件構成。

三、示例

示例1:獲取自有屬性的屬性描述符

var obj = { a: 1 };
Object.getOwnPropertyDescriptor(obj, 'a');
// Object {value: 1, writable: true, enumerable: true, configurable: true}

示例2:獲取繼承屬性的屬性描述符

var obj1 = { a: 1 };
var obj2 = Object.create(obj1);
obj2.a; // 1
Object.getOwnPropertyDescriptor(obj2, 'a');  // undefined

obj2.a訪問的是原型物件obj1上的屬性,而Object.getOwnPropertyDescriptor()獲取的是指定物件的自有屬性,故上述示例返回undefined。

 

示例3:獲取不存在的屬性的屬性描述符

var obj = {};
Object.getOwnPropertyDescriptor(obj, 'a');  // undefined

obj中並不存在屬性a,Object.getOwnPropertyDescriptor()方法返回undefined。

示例4:獲取非物件的屬性描述符

// ES6環境下
var str = 'abcd';
Object.getOwnPropertyDescriptor(str, 0);
// Object {value: "a", writable: false, enumerable: true, configurable: false}

在ES5中,第二步的操作會引發TypeError,因為傳入Object.getOwnPropertyDescriptor()的第一個引數不是物件。

在ES6中,如果傳入Object.getOwnPropertyDescriptor()的第一個引數不是物件,會被強制轉換為物件。

故上述傳入方法的str會被強制轉換為物件new String('abcd'),而轉換後的物件是擁有屬性"0"的,所以會返回相應的屬性描述符。

同時我們也可以注意到,如果第二個引數不是字串,也會被強制轉換為字串。