最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ES6 Object.assign()的用法及其使用

 更新時間:2020年01月18日 16:18:21   作者:想要飛翔的小豬  
這篇文章主要介紹了ES6 Object.assign()的用法及其使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.Object.assign()基本用法:

Object.assign方法用來將源對象(source)的所有可枚舉屬性,復(fù)制到目標(biāo)對象(target)。它至少需要兩個對象作為參數(shù),第一個參數(shù)是目標(biāo)對象,后面的參數(shù)都是源對象。

let targetObj1 = { a: 1 };
    let sourceObj1 = { b: 1 };
    let sourceObj11 = { c: 3 };
    Object.assign(targetObj1, sourceObj1, sourceObj11);
    console.log(targetObj1);

注:如果目標(biāo)對象與源對象有同名屬性,或多個源對象有同名屬性,則后面的屬性會覆蓋前面的屬性。

let targetObj1 = { a: 1, b: 2 };
    let sourceObj1 = { b: 1 };
    let sourceObj11 = { c: 3 };
    Object.assign(targetObj1, sourceObj1, sourceObj11);
    console.log(targetObj1);

如果只有一個參數(shù),Object.assign會直接返回該參數(shù)。

let targetObj1 = { a: 4 }
    Object.assign(targetObj1);
    console.log(targetObj1)

如果該參數(shù)不是對象,則會先轉(zhuǎn)成對象,然后返回。

console.log(typeof (Object.assign(2)));

由于undefined和null無法轉(zhuǎn)成對象,所以如果它們作為參數(shù),就會報錯。

console.log(typeof(Object.assign(null)));
 
 console.log(typeof(Object.assign(underfind)));

注意:如果非對象參數(shù)出現(xiàn)在源對象的位置(即非首參數(shù)),那么處理規(guī)則有所不同。首先,這些參數(shù)都會轉(zhuǎn)成對象,如果無法轉(zhuǎn)成對象,就會跳過。這意味著, 如果undefined和null不在首參數(shù),就不會報錯。其他類型的值(即數(shù)值、字符串和布爾值)不在首參數(shù),也不會報錯。但是,除了字符串會以數(shù)組形式,拷貝入目標(biāo)對象,其他值都不會產(chǎn)生效果。

Object.assign只拷貝自身屬性,不可枚舉的屬性(enumerable為false)和繼承的屬性不會被拷貝。

let obj1 = Object.assign({ dwb: 'zjl' },
 
Object.defineProperty({}, 'zmf', {
 
enumerable: false,
 
value: 'zmf'
 
})
 
)
 
console.log(obj1);
 
let obj2 = Object.assign({ dwb: 'zjl' },
 
Object.defineProperty({}, 'zmf', {
 
enumerable: true,
 
value: 'zmf'
 
})
 
)
 
console.log(obj2);

對于嵌套的對象,Object.assign的處理方法是替換,而不是添加。

var target = { a: { b: 'c', d: 'e' } }
 
var source = { a: { b: 'hello' } }
 
Object.assign(target, source);

上面代碼中,target對象的a屬性被source對象的a屬性整個替換掉了,而不會得到{ a: { b: 'hello', d: 'e' } }的結(jié)果。這通常不是開發(fā)者想要的,需要特別小心。有一些函數(shù)庫提供Object.assign的定制版本(比如Lodash的_.defaultsDeep方法),可以解決深拷貝的問題。

注意,Object.assign可以用來處理數(shù)組,但是會把數(shù)組視為對象。

console.log(Object.assign([1, 2, 3], [4, 5]));

其中,4覆蓋1,5覆蓋2,因為它們在數(shù)組的同一位置,所以就對應(yīng)位置覆蓋了。

Object.assign方法實(shí)行的是淺拷貝,而不是深拷貝。也就是說,如果源對象某個屬性的值是對象,那么目標(biāo)對象拷貝得到的是這個對象的引用。

var object1 = { a: { b: 1 } };
 
var object2 = Object.assign({}, object1);
 
object1.a.b = 2;
 
console.log(object2.a.b);

2.用途

2.1為對象添加屬性

2.2為對象添加方法

2.3克隆對象

function copyFnc(origin) {
 
return Object.assign({}, origin)
 
}
 
var sur = { a: 1, b: 2 };
 
console.log(copyFnc(sur));

上面代碼將原始對象拷貝到一個空對象,就得到了原始對象的克隆。

不過,采用這種方法克隆,只能克隆原始對象自身的值,不能克隆它繼承的值。如果想要保持繼承鏈,可以采用下面的代碼。

function clone(origin) {
 
let originProto = Object.getPrototypeOf(origin);
 
return Object.assign(Object.create(originProto), origin);
 
}

 在JS里子類利用Object.getPrototypeOf去調(diào)用父類方法,用來獲取對象的原型。

2.4 合并多個對象

//多個對象合并到某個對象

const merge = (target, ...sources) => Object.assign(target, ...sources);
//多個對象合并到新對象

const merge = (...sources) => Object.assign({}, ...sources);
 

2.5為屬性指定默認(rèn)值

const DEFAULTS = {
 
logLevel: 0,
 
outputFormat: 'html'
 
};
 
function processContent(options) {
 
let options = Object.assign({}, DEFAULTS, options);
 
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScripts數(shù)組里的對象排序的24個方法(最新整理收藏)

    JavaScripts數(shù)組里的對象排序的24個方法(最新整理收藏)

    文章介紹了24種在JavaScript中對數(shù)組進(jìn)行排序的方法,每種方法都有具體的示例和應(yīng)用場景,適合不同情況下的排序需求,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • JavaScript實(shí)現(xiàn)監(jiān)控上傳和下載進(jìn)度

    JavaScript實(shí)現(xiàn)監(jiān)控上傳和下載進(jìn)度

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)監(jiān)控上傳和下載進(jìn)度,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值需要的小伙伴可以參考一下
    2022-05-05
  • JavaScript實(shí)現(xiàn)移動端橫豎屏檢測

    JavaScript實(shí)現(xiàn)移動端橫豎屏檢測

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)移動端橫豎屏檢測,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 瀏覽器的JavaScript引擎的識別方法

    瀏覽器的JavaScript引擎的識別方法

    識別瀏覽器的JavaScript引擎的方法對PC瀏覽器和移動瀏覽器都可用,其實(shí)實(shí)現(xiàn)原理就是下面的這段js,感興趣的朋友可以參考下
    2013-10-10
  • 網(wǎng)頁上的Javascript編輯器和代碼格式化

    網(wǎng)頁上的Javascript編輯器和代碼格式化

    因為我們的項目可以通過編寫腳本(javascript)進(jìn)行功能擴(kuò)展,所以為了方便現(xiàn)場實(shí)施人員,所以突發(fā)奇想想在網(wǎng)頁上(系統(tǒng)是B/S的)提供一個javascript的編輯器。
    2010-04-04
  • 微信小程序?qū)崿F(xiàn)點(diǎn)擊卡片 翻轉(zhuǎn)效果

    微信小程序?qū)崿F(xiàn)點(diǎn)擊卡片 翻轉(zhuǎn)效果

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)點(diǎn)擊卡片 翻轉(zhuǎn)效果本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • JS 在數(shù)組指定位置插入/刪除數(shù)據(jù)的方法

    JS 在數(shù)組指定位置插入/刪除數(shù)據(jù)的方法

    下面小編就為大家?guī)硪黄狫S 在數(shù)組指定位置插入/刪除數(shù)據(jù)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 微信小程序?qū)崿F(xiàn)倒計時60s獲取驗證碼

    微信小程序?qū)崿F(xiàn)倒計時60s獲取驗證碼

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)倒計時60s獲取驗證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 微信小程序?qū)崿F(xiàn)點(diǎn)擊空白隱藏的方法示例

    微信小程序?qū)崿F(xiàn)點(diǎn)擊空白隱藏的方法示例

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)點(diǎn)擊空白隱藏的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 用JS實(shí)現(xiàn)貪吃蛇小游戲

    用JS實(shí)現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了用JS實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論

社会| 北碚区| 木里| 富民县| 嘉荫县| 喀喇沁旗| 汕头市| 江门市| 苍梧县| 吴忠市| 大埔县| 南乐县| 长海县| 邢台县| 淳化县| 成都市| 北安市| 海原县| 绿春县| 会理县| 讷河市| 全州县| 东光县| 石渠县| 盖州市| 蕉岭县| 厦门市| 汽车| 沂水县| 安泽县| 太仆寺旗| 屏边| 大悟县| 抚松县| 安西县| 惠东县| 酒泉市| 白城市| 济源市| 宜州市| 文山县|