Object函數的內置方法 Object.defineProperties


一、定義

Object.defineProperties() 方法直接在一個對象上定義新的屬性或修改多個現有屬性,並返回該對象。

二、語法

Object.defineProperties(obj, props);

參數

obj:要定義或修改屬性的對象

props:要新增或修改的屬性對象集合

props的格式是:{ property: property_descriptor_obj }

返回值

被傳遞給函數的對象

該方法其實就是Object.defineProperty()的加強版,Object.defineProperty()一次只能新增或修改一個屬性,該方法可以同時新增或修改多個屬性。

三、示例

示例1:同時定義多個屬性

var obj = Object.defineProperties({}, {
    x: { value: 1, writable: true, enumerable: true, configurable: true }, 
    y: { value: 1, writable: true, enumerable: false, configurable: false }, 
    r: { get: function () { return Math.sqrt(this.x * this.x + this.y * this.y); },
         enumerable: true, configurable: true }
});

obj.x; // 1
obj.y; // 1
obj.r; // 1.4142135623730951

示例2:當出現沖突的時候,錯誤后續的屬性不生效,錯誤發生前的屬性生效

// 首先定義一個不可配置的屬性a
var obj = Object.defineProperty({}, 'a', {
    value: 1,
    enumerable: true,
    writable: true,
    configurable: false
});

// 同時新增屬性b和d,修改已有屬性a
Object.defineProperties(obj, {
    b: { value: 2, writable: true, enumerable: true, configurable: true }, 
    a: { value: 3, writable: true, enumerable: false, configurable: false }, 
    c: { value: 4, writable: true, enumerable: true, configurable: true }, 
});

// 這里會觸發TypeError,因為a已經是不可配置的屬性,無法重新配置
obj.b; // 2
obj.a; // 1
obj.c; // undefined

由上述代碼實踐可知,當Object.defineProperties()方法同時定義或修改多個屬性的時候,如果發生錯誤,那么發生錯誤之前定義或修改的屬性還是會生效,而發出錯誤所在行及之后的屬性不會生效。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM