js物件拷貝的方法

2021-09-08 06:24:18 字數 2755 閱讀 2371

物件拷貝的方法是乙個難點,尤其是深拷貝。建議把**都執行下,幫助理解拷貝。

1. 適合情況

json物件的深度轉殖。方法是先json.stringify() 轉為json字串, 再json.parse() 轉為json陣列

2. 缺點:

a. 如果你的物件裡有函式, 函式無法被拷貝下來

b. 無法拷貝copyobj物件原型鏈上的屬性和方法

var obj =};

// 相同的引用

var obj2 = obj;

console.

log(obj2 == obj)

;//true 直接複製只是複製物件的指標,還指向同乙個物件

//不同的引用

var obj3 =

json

.parse

(json

.stringify

(obj));

console.

log(obj3 == obj)

//false 通過json方法複製後的位址不一樣

console.

log(obj3)

;

jquery.extend(object)

概述:

擴充套件jquery物件本身,用來在jquery命名空間上增加新函式。

var obj =};

var obj2 = $.

extend

(, obj)

;console.

log(obj2 == obj)

//false 複製後的位址不一樣

複製物件存在於object原型prototype中

1. 淺拷貝:只是拷貝了基本型別的資料;然而引用型別資料, 只是複製了指標,複製後也是會發生引用。

除了這個是淺拷貝,本文章介紹的其他方法都是深拷貝。

var obj =};

var obj2 =

;for

(var i in obj)

console.

log(obj2)

;obj2.y.c.

push(4

);//給新陣列新增乙個元素4,會同步反映在新舊陣列中

console.

log(obj2.y.c)

;// [1,2,3,4]

console.

log(obj.y.c)

;// [1,2,3,4] 淺拷貝只是複製了位址,修改是記憶體中的資料

2. 深拷貝深拷貝, 就是遍歷那個被拷貝的物件。判斷物件裡每一項的資料型別。如果不是物件型別, 就直接賦值, 如果是物件型別, 就再次呼叫遞迴的方法去賦值。

var obj =};

function

getclass

(o)function

deepcopy

(obj)

;//判斷傳入的如果是物件,繼續遍歷

else

if(oclass ==

"array"

) result =

;//判斷傳入的如果是陣列,繼續遍歷

else

return obj;

//如果是基本資料型別就直接返回

//通過原型來繼承父類的公共屬性

js物件拷貝的方法

1.適合情況 json物件的深度轉殖,方法是json.stringify 轉化為json字串,再json.parse 轉為json陣列 2.缺點 a.如果你的物件裡面有函式,函式無法被拷貝下來 b.無法拷貝copyobj物件原型鏈上得屬性和方法 var obj 相同的引用 var obj2 boj ...

js物件拷貝的方法

適合情況 json物件的深度轉殖。方法是先json.stringify 轉為json字串,再json.parse 轉為json陣列 缺點 a.如果你的物件裡有函式,函式無法被拷貝下來 b.無法拷貝copyobj物件原型鏈上的屬性和方法 var obj 相同的引用 var obj2 obj conso...

js物件深拷貝方法

json.stringify 是目前前端開發過程中最常用的深拷貝方式,原理是把有個物件序列化成為乙個 json 字串,將物件的內容轉換成字串的形式再儲存到磁碟上,再用json.parse 反序列化將 json 字串變成乙個新的物件 1 let obj1 56 let str json.stringi...