1. 程式人生 > 實用技巧 >Object.assign和Object.create的基本用法

Object.assign和Object.create的基本用法

let obj = Object.assign(targetObj, …sourceObj)
作用:將一個或多個源物件自身的可列舉屬性與目標物件的屬性合併
返回值:合併後的目標物件

    var obj1 = {name: 'zyp1'}
    var obj2 = {name: 'zyp2', age: 18}
    var obj3 = {name: 'zyp'}
    obj3 = Object.defineProperty(obj3, 'like', {
        value: 'reading'
    })
    var obj4 = {}
    var obj = Object.assign(obj4, obj1, obj2, obj3)
    console.log(obj) 
//結果為{name: "zyp", age: 18} console.log(obj4) //結果也為{name: "zyp", age: 18}

這裡還要提一下的是,用擴充套件運算子也可以實現物件的合併:

    var obj5 = {...obj1, ...obj2, ...obj3}
    console.log(obj5) //結果為{name: "zyp", age: 18}

let obj = Object.create(protoObj, [propertiesObj])
作用:建立新物件,在建立新物件的同時定義其原型物件(protoObj)以及一些新的屬性(propertiesObj,新屬性構成的物件,可選)
返回值:建立的新物件

// new Object() 方式建立
var a = {  rep : 'apple' }
var b = new Object(a)
console.log(b) // {rep: "apple"}
console.log(b.__proto__) // {}
console.log(b.rep) // {rep: "apple"}

// Object.create() 方式建立
var a = { rep: 'apple' }
var b = Object.create(a)
console.log(b)  // {}
console.log(b.__proto__) // {rep: "apple"}
console.log(b.rep) //
{rep: "apple"}

function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    Person.prortotype.sayName = function() {
        alert(this.name)
    }
    function Worker(name, age) {
        Person.call(this, name, age)
    }
    var worker = new Worker('zyp', 18)
    console.log(worker) 

得到的worker物件結果如下圖:

這個符合我們的預期,通過建構函式實現繼承的子類例項不會繼承父類的原型屬性,因此父類的sayName方法並沒有被子類物件繼承。

  //子類繼承父類的原型屬性
    Worker.prototype = Object.create(Person.prototype)
    Worker.prototype.constructor = Worker

得到的結果如下: