js物件拷貝的方法

2021-10-10 07:56:46 字數 2132 閱讀 8294

1.適合情況:

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

2.缺點:

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

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

var obj=

}//相同的引用

var obj2=boj;

console.

log(obj2==boj)

;//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 pbj2=$.

extend

(,obj)

;console.

log(obj2==obj)

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

console.

log(obj2)

;

複製物件存在於object原型prototype

var obj=

}var obj2=object.

create

(obj)

;console.

log(obj2==obj)

;//false

console.

log(boj2)

;

var obj=

}var obj2=

;for

(var i in obj)

console.

log(boj2)

;obj2.y.c.

push(4

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

console.

log(obj2.y.c)

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

console.

log(boj.y.c)

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

2.深拷貝

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

var obj =};

function getclass

(o)function deepcopy

(obj)

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

else

if(oclass ==

"array"

) result =

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

else

return obj;

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

for(var i in obj)

return result;

}var obj2 =

deepcopy

(obj)

;console.

log(obj2)

;

function father()

}father.prototype.eat = function (

)function son()

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

son.prototype = new father()

;var s = new son()

;console.

log(s)

;console.

log(s.say)

;//hi

console.

log(s.fn(

));//hi

js物件拷貝的方法

物件拷貝的方法是乙個難點,尤其是深拷貝。建議把 都執行下,幫助理解拷貝。1.適合情況 json物件的深度轉殖。方法是先json.stringify 轉為json字串,再json.parse 轉為json陣列 2.缺點 a.如果你的物件裡有函式,函式無法被拷貝下來 b.無法拷貝copyobj物件原型鏈...

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...