細(xì)說一下 Object.assign()

Object.assign()

-- 方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對象分配到目標(biāo)對象训枢。它將返回目標(biāo)對象托修。 
-- 它是一個(gè)淺拷貝恒界,如果源對象的屬性是一個(gè)引用類型的睦刃,它僅僅會復(fù)制其引用值。

  1. Object.assign() 第一個(gè)參數(shù)是目標(biāo)對象十酣,后面的都是源對象涩拙。 Object.assign (target, source1,source2, source3, ...);
  2. 如果源對像與目標(biāo)對象有相同的屬性名,或源對象中有相同的屬性名耸采,后面的會覆蓋前邊的值 兴泥。
  3. 如果參數(shù)傳入的不是Object臣缀,會轉(zhuǎn)成Object
  4. null和undefined 不能作為參數(shù)傳入王滤,因?yàn)閚ull和undefined 不能轉(zhuǎn)成Object
  5. 如果發(fā)生的值是一個(gè)對象淋叶,Object.assign的處理方法是直接替換央拖,而不是添加。 如下面的 a 和 b
  6. 可以為類添加方法
    
    const obj1  = {name:'小明', age:'18',education:'undergraduate'}
    const obj2 = {height:'180cm',hobby:'painting'}
    let  obj = Object.assign({},obj1, obj2)
    console.log('合并后的類:');
    console.log(JSON.stringify(obj));
    Object.assign(obj, obj, {height:'170cm'});
    console.log('修改過height后的類:');
    console.log(JSON.stringify(obj));
    Object.assign(obj, {arr:{index:1, name:'類'}}, {name:'加了一個(gè)類進(jìn)去'})
    console.log(JSON.stringify(obj));
    console.log("加一個(gè)類進(jìn)去后:"+obj.arr.index);

    // a. 這種修改方式润讥,只會修改index 的值
    Object.assign(obj, Object.assign(obj.arr, {index:2}))
    console.log(JSON.stringify(obj));
    console.log("修改類index后:"+obj.arr.index);

    // b. 這種修改方式呛梆,arr只剩下index屬性
    // Object.assign(obj, {arr:{index:2}}, {name:'修改類的index為:2'})
    // console.log(JSON.stringify(obj));
    // console.log("修改類index后:"+obj.arr.index);

    // Object.assign()做的是淺拷貝吟税, 如果一個(gè)屬性是新合并進(jìn)來的對象燥翅,改變源對象的值骑篙,會影響合并后的值 。
    let newObj  = {type:{aa:'蔬菜'}};
    Object.assign(obj, newObj);
    console.log("合并一個(gè)含屬性type的類后:"+JSON.stringify(obj));
    // c. 這種不會影響obj中的type.aa
    // Object.assign(newObj, {type:{aa:'水果'}});
    // d. 這種會影響obj中的type.aa
    newObj.type.aa = '水果';
    console.log("修改newObj中的type.aa后:"+JSON.stringify(newObj));
    console.log("修改newObj中的type.aa后:"+JSON.stringify(obj));

    // e. 用Object.assign合并一個(gè)數(shù)組的時(shí)候森书,會把數(shù)組當(dāng)成一個(gè)屬性名為index的類
    const arr1  = [1, 2, 3, 4, 5] ;  // 在Object的眼里是這樣的: arr1={0:1, 1:2, 2:3谎势,3:4凛膏, 4:5}
    const arr2 =  [8, 9, 10];        // 在Object的眼里是這樣的: arr2={0:8, 1:9, 2:10}
    console.log("合并后的數(shù)組為:"+Object.assign(arr1, arr2)); // 得到的結(jié)果是:8, 9, 10, 4, 5

    // f. Object.assign() 為類添加方法
    Object.assign(UserInfo.prototype, {
      getUserName (){
        return this.name;
      },
      getUserGender (){
        return this.gender ;
      }
    })
    let user  = new UserInfo("笑笑", '女');
    console.log("userinfo中的信息為: "+ user.getUserName() +", "+user.getUserGender()); // 輸出的結(jié)果為:笑笑,女


輸出的結(jié)果:

ObjectAssignDemo.js:13 合并后的類:
ObjectAssignDemo.js:14 {"name":"小明","age":"18","education":"undergraduate","height":"180cm","hobby":"painting"}
ObjectAssignDemo.js:16 修改過height后的類:
ObjectAssignDemo.js:17 {"name":"小明","age":"18","education":"undergraduate","height":"170cm","hobby":"painting"}
ObjectAssignDemo.js:19 {"name":"加了一個(gè)類進(jìn)去","age":"18","education":"undergraduate","height":"170cm","hobby":"painting","arr":{"index":1,"name":"類"}}
ObjectAssignDemo.js:20 加一個(gè)類進(jìn)去后:1
ObjectAssignDemo.js:24 {"name":"類","age":"18","education":"undergraduate","height":"170cm","hobby":"painting","arr":{"index":2,"name":"類"},"index":2}
ObjectAssignDemo.js:25 修改類index后:2
ObjectAssignDemo.js:35 合并一個(gè)含屬性type的類后:{"name":"類","age":"18","education":"undergraduate","height":"170cm","hobby":"painting","arr":{"index":2,"name":"類"},"index":2,"type":{"aa":"蔬菜"}}
ObjectAssignDemo.js:40 修改newObj中的type.aa后:{"type":{"aa":"水果"}}
ObjectAssignDemo.js:41 修改newObj中的type.aa后:{"name":"類","age":"18","education":"undergraduate","height":"170cm","hobby":"painting","arr":{"index":2,"name":"類"},"index":2,"type":{"aa":"水果"}}
ObjectAssignDemo.js:46 合并后的數(shù)組為:8,9,10,4,5
ObjectAssignDemo.js:58 userinfo中的信息為: 笑笑, 女

淺拷貝舉例

let a ={id:1001};
let b = {name: 'testname', idObj: a}; 
let c = Object.assign ({}, b);
a.id = 999;  // 此時(shí)b脏榆、c 中的idObj.id 都會變成999猖毫。 這就是淺拷貝了。 用的時(shí)候一定要注意须喂。 
console.log("cid"+ c.idObj.id+", bid"+b.idObj.id);  // 這兩個(gè)都是999 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吁断,一起剝皮案震驚了整個(gè)濱河市趁蕊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌仔役,老刑警劉巖掷伙,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異又兵,居然都是意外死亡任柜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門沛厨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宙地,“玉大人,你說我怎么就攤上這事逆皮≌啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵电谣,是天一觀的道長秽梅。 經(jīng)常有香客問我,道長辰企,這世上最難降的妖魔是什么风纠? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮牢贸,結(jié)果婚禮上竹观,老公的妹妹穿的比我還像新娘。我一直安慰自己潜索,他們只是感情好臭增,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著竹习,像睡著了一般誊抛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上整陌,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天拗窃,我揣著相機(jī)與錄音,去河邊找鬼泌辫。 笑死随夸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的震放。 我是一名探鬼主播宾毒,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼殿遂!你這毒婦竟也來了诈铛?” 一聲冷哼從身側(cè)響起乙各,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎幢竹,沒想到半個(gè)月后耳峦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妨退,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年妇萄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咬荷。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冠句,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出幸乒,到底是詐尸還是另有隱情懦底,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布罕扎,位于F島的核電站聚唐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腔召。R本人自食惡果不足惜杆查,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望臀蛛。 院中可真熱鬧亲桦,春花似錦、人聲如沸浊仆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抡柿。三九已至舔琅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洲劣,已是汗流浹背备蚓。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留囱稽,地道東北人星著。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像粗悯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子同欠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)样傍,也就是一...
    悟名先生閱讀 4,150評論 0 13
  • 屬性的簡潔表示法 ES6允許直接寫入變量和函數(shù)横缔,作為對象的屬性和方法。這樣的書寫更加簡潔衫哥。 上面代碼表明茎刚,ES6允...
    呼呼哥閱讀 2,923評論 0 2
  • 8月12日,今天真舒服撤逢,沒有了往日的高溫膛锭,也許是我們的愛心得到了回應(yīng),老天也照顧我們讓我們有一個(gè)涼快的走訪...
    陳潑閱讀 209評論 0 2
  • 最近鬧得比較火熱的是APA酒店放置右翼書籍蚊荣,負(fù)責(zé)人拒絕撤書的新聞初狰。 底下評論簡直炸開了鍋,什么樣的都有互例,那么各位網(wǎng)...
    會飛的咖啡閱讀 258評論 0 1
  • 山前只有豐文意奢入,傲立陽光開氣勻。 我是山中惆悵客媳叨,但舒微韻又誰聞腥光?
    峰韻9023閱讀 189評論 0 1