日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

object.assign

發(fā)布時間:2023/12/31 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 object.assign 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

(1)淺拷貝

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

const obj1 = {a: {b: 1}};const obj2 = Object.assign({}, obj1);obj1.a.b = 2;obj2.a.b // 2

(2)同名屬性的替換

對于這種嵌套的對象,一旦遇到同名屬性,Object.assign的處理方法是替換,而不是添加。

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

常見用途

(1)為對象添加屬性

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

上面方法通過Object.assign方法,將x屬性和y屬性添加到Point類的對象實例。


(2)為對象添加方法

Object.assign(SomeClass.prototype, {someMethod(arg1, arg2) {···},anotherMethod() {···}});

// 等同于下面的寫法

SomeClass.prototype.someMethod = function (arg1, arg2) {···};SomeClass.prototype.anotherMethod = function () {···};

上面代碼使用了對象屬性的簡潔表示法,直接將兩個函數(shù)放在大括號中,再使用assign方法添加到SomeClass.prototype之中。


(3)克隆對象

function clone(origin) {return Object.assign({}, origin);}

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

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

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

(4)合并多個對象

將多個對象合并到某個對象。

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

如果希望合并后返回一個新對象,可以改寫上面函數(shù),對一個空對象合并。

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

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

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

原文地址:http://es6.ruanyifeng.com/#docs/object 作者:阮一峰

總結(jié)

以上是生活随笔為你收集整理的object.assign的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。