因此,咱們須要封裝一個函數,來對對象進行拷貝,經過for in 循環獲取基本類型,賦值每個基本類型,才能真正意義上的複製一個對象code
var obj = {a:10}; function copy(obj){ var newobj = {}; for ( var attr in obj) { newobj[attr] = obj[attr]; } return newobj; } var obj2 = copy(obj); obj2.a = 20; alert(obj.a); //10
這樣就解決了對象賦值的問題。對象
3、深拷貝
可是這裏存在隱患,若是obj中,a的值不是10,而是一個對象,這樣就會致使在for in中,將a這個對象的引用賦值爲新對象,致使存在對象引用的問題。blog
var obj = {a:{b:10}}; function copy(obj){ var newobj = {}; for ( var attr in obj) { newobj[attr] = obj[attr]; } return newobj; } var obj2 = copy(obj); obj2.a.b = 20; alert(obj.a.b); //20
所以,因爲這個copy對象只是對第一層進行拷貝,沒法拷貝深層的對象,這個copy爲淺拷貝,咱們須要經過遞歸,來拷貝深層的對象。將copy改形成遞歸便可遞歸
var obj = {a:{b:10}}; function deepCopy(obj){ if(typeof obj != 'object'){ return obj; } var newobj = {}; for ( var attr in obj) { newobj[attr] = deepCopy(obj[attr]); } return newobj; } var obj2 = deepCopy(obj); obj2.a.b = 20; alert(obj.a.b); //10