Object的扩展 Object.create、Object.defineProperty、Object.defineProperties

1. Object.create(obj, [descriptors])

作用:  以指定对象为原型,创建新的对象。同时,第二个参数可以为新的对象添加新的属性,并对此属性进行描述。

举例:(没有第二个参数时)

    var obj1 = {username: smyhvae, age: 26};
    var obj2 = {address:shenzhen};

    obj2 = Object.create(obj1);
    console.log(obj2);

结果:

Object的扩展 Object.create、Object.defineProperty、Object.defineProperties

 

 

 

我们看到obj1成为了obj2的原型。  (注: obj2原先的属性好像被覆盖掉了)

 

举例2:(有第二个参数时)

第二个参数可以给新的对象添加新的属性

        let obj1 = {
            username: xiaozhu,
            age: 19
        }
        let obj2 = {
            address: shenzhen
        }
        obj2 = Object.create(obj1, {
            sex: {
                value: ,     // 设置属性值
                writeable: false,  // 标记当前属性值是否可修改, 不写默认为false,不可修改
                configurable: true,  // 标识当前属性是否可以被删除,默认为false ,不可删除
                enumerable: true
            }
        })
        console.log(obj2)

Object的扩展 Object.create、Object.defineProperty、Object.defineProperties

 

 

2.  Object.defineProperty(obj, prop, descriptor) 

作用:  定义一个对象的新属性,或者修改一个对象已有的属性值,返回这个被处理过的对象。

参数说明:

1. obj:  必需,目标对象

2. prop: 必需, 需定义或修改的属性的名字

3. decriptor:  必需,目标属性所拥有的特性。

let obj6 = { name: xiaozhu }
// 方法一  修改对象属性值
Object.defineProperty(obj6, name, {
    value: xioazhu1
})
console.log(obj6);     // {name: "xioazhu1"} 修改了obj6的name值

// 方法二  为obj6添加新属性
Object.defineProperty(obj6, sex, {
    value: 19
})
console.log(obj6);    // {name: "xioazhu1", sex: 19}

 

3. Object.defineProperties(obj,  descriptors)

作用: 该方法与Object.defineProperty 相似,只不过该方法可以一次性操作多个属性

let obj7 = {
    name: xiaozhu
}
Object.defineProperties(obj7, {
    age: {
        value: 19
    },
    sex: {
        value: 
    }
})
// 为obj7 添加了两个属性 console.log(obj7);
// {name: "xiaozhu", age: 19, sex: "女"}

 

Object的扩展 Object.create、Object.defineProperty、Object.defineProperties

上一篇:noip模拟16


下一篇:二分查找,开闭区间