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