JS物件導向元件(五) 複製物件(拷貝繼承)

2022-05-18 15:23:32 字數 1040 閱讀 9146

研究到這兒,竟然出現了乙個面試題目

var a = ;

var b = a;

b.name = '小強';

alert( a.name );

結果必然是「小強」,原因是物件的引用,兩個用的是乙個位址,所以只要這個位址裡的東西變了,那個兩個物件彈出來的自然也要變。

故而這兒存在的是上篇同樣的問題。

var a =;

var b ={};

extend( b , a );

b.name = '小強'

;alert( a.name );

function extend(obj1,obj2)

}

因此上篇的解決方案就是將 extend的方法加上,並且將

createstar.prototype = createperson.prototype;   改成extend(createstar.prototype,createperson.prototype);

還有乙個面試題目:

var a = [1,2,3

];var b =a;

b.push(4);

alert(a);

//1,2,3,4

var a = [1,2,3];

var b = a;

b = [1,2,3,4];

alert(a); // 1,2,3

上面這個彈出結果,考察的是物件引用時的問題,物件引用改變了。

下面的彈出結果是,當b重新賦值時,物件應用問題就已經解開了,因為重新賦值時,b就又開了個新的位址,所以a還是1,2,3

所以總結一下,就是如下:
屬性的繼承

方法的繼承

呼叫父類的建構函式call

for in  拷貝繼承(jquery中就是如此)

JS物件複製 深拷貝 淺拷貝

在本文中,我們將從淺拷貝 shallow copy 和深拷貝 deep copy 兩個方面,介紹多種 js 中複製物件的方法。var foo console.log foo.a abc var bar foo console.log bar.a abc foo.a yo foo console.lo...

js重新複製,深拷貝物件

其實用json.stringfy 和json.parse 就可以。var copy json.parse json.stringify 物件名 但是這種簡單粗暴的方法有其侷限性。當值為undefined function symbol 會在轉換過程中被忽略。所以,物件值有這三種的話用這種方法會導致屬...

Js 物件導向 淺拷貝和深拷貝

淺拷貝只是拷貝一層,更深層次物件級別的只拷貝引用 深拷貝拷多層,每一級別的資料都會拷貝 object.assign target,sources es6 新增方法可以淺拷貝 淺拷貝原始碼 doctype html en utf 8 viewport content width device widt...