JS 对Object.assign()和Object.create()的理解

Object.assign() 提供浅拷贝(仅属性和方法),它将覆盖声明的方法和属性 . 而Object.create() 提供深拷贝提供原型链

 

var target1 = {prop:111,prop2:222}, target2 = {prop:111,prop2:222};
var obj1 = Object.create(target1, 
    {myProp1:{ 
        value: 1,
        }
    });
var obj2 = Object.assign(target2, {myProp2: 2});
let gopd1 = Object.getOwnPropertyDescriptor(obj1,'myProp1')
// Object.getOwnPropertyDescriptor() 
// 方法返回指定对象上一个自有属性对应的属性描述符。
// (自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)
let gopd2 = Object.getOwnPropertyDescriptor(obj2,'myProp2')
console.log(target1)
// {prop:111,prop2:222}
console.log(obj1)
//  {"myProp1":1}
console.log(target2)
// {prop:111,prop2:222}
console.log(obj2)
//  {"prop":111,"prop2":222,"myProp2":2}
console.log(gopd1)
// {"value":1,"writable":false,"enumerable":false,"configurable":false}
// 因为定义时没有对myProp2的后三个属性()进行配置,所以默认都是false

// writable——当且仅当属性的值可以被改变时为true。(仅针对数据属性描述有效)
// enumerable——当且仅当指定对象的属性可以被枚举出时,为 true。
// configurable——当且仅当指定对象的属性描述可以被改变或者属性可被删除时,为true。



console.log(gopd2)
// {"value":2,"writable":true,"enumerable":true,"configurable":true}
 

 

posted @ 2021-12-28 11:17  时间观测者  阅读(199)  评论(0编辑  收藏  举报