真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ES6之Object.assign()詳解-創(chuàng)新互聯(lián)

譯者按: 這篇博客將介紹ES6新增的Object.assign()方法。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到白朗網(wǎng)站設(shè)計(jì)與白朗網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋白朗地區(qū)。
  • 原文: ECMAScript 6: merging objects via Object.assign()
  • 譯者: Fundebug

為了保證可讀性,本文采用意譯而非直譯。另外,本文版權(quán)歸原作者所有,翻譯僅用于學(xué)習(xí)。

將A對(duì)象的屬性復(fù)制給B對(duì)象,這是JavaScript編程中很常見(jiàn)的操作。這篇博客將介紹ES6Object.assign()屬性,可以用于對(duì)象復(fù)制。

在JavaScript生態(tài)系統(tǒng)中,對(duì)象復(fù)制有另外一個(gè)術(shù)語(yǔ): extend。下面是兩個(gè)JS庫(kù)提供的extend接口:

  • Prototype: Object.extend(destination, source)
  • Underscore.js: _.extend(destination, *sources)

Object.assign()介紹

ES6提供了Object.assign(),用于合并/復(fù)制對(duì)象的屬性。

Object.assign(target, source_1, ..., source_n)

它會(huì)修改target對(duì)象,然后將它返回:先將source_1對(duì)象的所有可枚舉屬性復(fù)制給target,然后依次復(fù)制source_1等的屬性。

1. 屬性名可以為字符串或者Symbol

ES6中,對(duì)象的屬性名可以是字符串或者Symbol。因?yàn)镾ymbol值具有唯一性,這就意味著Symbol作為對(duì)象的屬性名時(shí),可以保證不會(huì)出現(xiàn)同名的屬性。對(duì)象屬性名為字符串或者Symbol時(shí),Object.assign()都支持。

2. 屬性復(fù)制通過(guò)賦值實(shí)現(xiàn)

target對(duì)象的屬性是通過(guò)復(fù)制來(lái)創(chuàng)建的,這就意味著,如果targetsetters方法時(shí),它們將會(huì)被調(diào)用。

另一種方案是通過(guò)定義來(lái)實(shí)現(xiàn),這樣將會(huì)創(chuàng)建新的自有屬性,不會(huì)調(diào)用setters方法。其實(shí),另一個(gè)版本的Object.assign()的提案正是采用這種方法。不過(guò),這個(gè)提議在ES6中被拒絕了,也許之后的版本會(huì)再考慮。

Object.assign()使用示例

1. 初始化對(duì)象屬性

構(gòu)造器正是為了初始化對(duì)象的屬性,通常,我們不得不多次重復(fù)屬性的名字。示例代碼的constructor中,xy均重復(fù)了兩次:

class Point
{
    constructor(x, y)
    {
        this.x = x;
        this.y = y;
    }
}

如果可以的話,個(gè)人偏愛(ài)將所有冗余都省去。(事實(shí)上,CoffeeScriptTypeScript都有語(yǔ)法解決構(gòu)造器中屬性名重復(fù)的問(wèn)題。):

class Point
{
    constructor(this.x, this.y){}
}

至少,Object.assign()可以幫助我們減少一些重復(fù):

class Point
{
    constructor(x, y)
    {
        Object.assign(this, { x, y });
    }
}

ES6中, { x, y }{ x: x, y: y }的縮寫(xiě)。

2. 為對(duì)象添加方法

ECMAScript 5, you use a function expression to add a method to an object:

ES5中,需要使用function關(guān)鍵字定義對(duì)象的新增方法:

MyClass.prototype.foo = function(arg1, arg2)
{
    //...
};

ES6中,對(duì)象方法的定義更加簡(jiǎn)潔,不需要使用function關(guān)鍵字。這時(shí),可以使用Object.assign()為對(duì)象新增方法:

Object.assign(MyClass.prototype,
{
    foo(arg1, arg2)
    {
        //...
    }
});
3. 復(fù)制對(duì)象

使用Object.assign()深度復(fù)制對(duì)象,包括其prototype

var Point = function(x)
{
    this.x = x;
}

Point.prototype.y = 2;

var obj = new Point(1);

var copy = Object.assign({ __proto__: obj.__proto__ }, obj); // 輸出{x:1,y:2} 

console.log(copy) // 輸出{x:1,y:2}

僅復(fù)制自身屬性:

var Point = function(x)
{
    this.x = x;
}

Point.prototype.y = 2;

var obj = new Point(1);

var copy = Object.assign({}, obj); 

console.log(copy) // 輸出{x:1}

參考

  • Object properties in JavaScript
  • Properties in JavaScript: definition versus assignment
  • Callable entities in ECMAScript 6

關(guān)于Fundebug:

Fundebug專(zhuān)注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java實(shí)時(shí)BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計(jì)處理了7億+錯(cuò)誤事件,得到了Google、360、金山軟件、百姓網(wǎng)等眾多知名用戶的認(rèn)可。歡迎免費(fèi)試用!

ES6之Object.assign()詳解

版權(quán)聲明:

轉(zhuǎn)載時(shí)請(qǐng)注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/09/11/object-assign/

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


文章名稱(chēng):ES6之Object.assign()詳解-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://weahome.cn/article/dpggjj.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部