一個對象 foo 有一個屬性 baidu
var foo = {
baidu:'woshibaidu'
}
現在有一個對象 boo 引用了foo
var boo = foo
所以此時,在boo里添加屬性,或者修改屬性,都會影響到foo,例如:此代碼會在foo和boo里同時增加一個屬性。
boo.google = "imgoogle"
現在有問題來了。boo增加的google屬性,會在foo出現,并且在boo修改時,foo內也會改變,如何做到boo引用foo內百度的值,但在foo內無法修改boo內google的值呢
你直接這樣做的相當于是對一個對象的做淺拷貝。對于一個對象來說,你這樣賦值是把boo指向了foo的堆里面(相可以想成:foo和boo指向同一個地址),所以你不論是改變foo還是boo都是改變的同一個東西。。。所以說如果你是只是要里面的值,你應該用深拷貝的方式:
`
var foo = {
baidu:'woshibaidu'
}
var boo = JSON.parse(JSON.stringify(foo));
boo.baidu = "newBaidu"
boo.google = "imgoogle";
console.log(foo) // {baidu: "woshibaidu"}
console.log(boo) // {baidu: "newBaidu", google: "imgoogle"}
`
這樣的方法便可以實現對象的深拷貝,但是有一個問題就是,如果你的對象里面有函數調用,就會跳過那個顯示。所以如果有那種情況只能用遞歸來實現一個對象的深拷貝
如果你是想直接克隆一個對象,完全獨立,如下:
function objClone(initalObj){
var o = initalObj instanceof Array ? [] : {};
for(var k in initalObj) {
o[k] = (typeof(initalObj[k]) === 'object')&&(initalObj[k] != null) ? objClone(initalObj[k]) : initalObj[k];
}
return o;
}
var foo = {
baidu:'woshibaidu'
};
var boo = objClone(foo);
boo.google = "imgoogle"; // foo.google為undefined
//foo與boo完全隔離,任何操作都不會有相互影響
如果你是想繼承一個對象,然后再做修改,如下
function deepPrototypeClone(obj) {
const ret = Object.create(obj);
for (const [key, value] of Object.entries(obj)) {
if (value && typeof value === 'object') {
ret[key] = deepPrototypeClone(value);
}
}
return ret;
}
var foo = {
baidu:'woshibaidu'
};
var boo = deepPrototypeClone(foo);
boo.google = "imgoogle"; // foo.google為undefinded
//boo不會影響foo,但foo會影響boo(如果foo的某個屬性沒被boo重新賦值過)北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數據專業(yè)的國家
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產業(yè)為響應國家深化產教融合/校企合作的政策,積極推進“中國制造2025”,實現中華民族偉大復興的升級產業(yè)鏈。利用北京大學優(yōu)質教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯想擔任系統開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經理從事移動互聯網管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經理職務負責iOS教學及管理工作。
浪潮集團項目經理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網頁制作和網頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經驗。曾經歷任德國Software AG 技術顧問,美國Dachieve 系統架構師,美國AngelEngineers Inc. 系統架構師。