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()方法同时定义或修改多个属性的时候,如果发生错误,那么发生错误之前定义或修改的属性还是会生效,而发出错误所在行及之后的属性不会生效。

posted @ 2022-03-29 17:00  之鹿喵  阅读(982)  评论(0编辑  收藏  举报