本文實例講述了JS對象深度克隆。分享給大家供大家參考,具體如下:
成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、成都網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)通江,10余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
首先看一個例子:
var student = { name:"yxz", age:25 } var newStudent = student; newStudent.sex = "male"; console.log(student); //{name:"yxz",age:25,sex:"male"}
由此可見,將一個對象通過簡單的傳遞賦值傳遞給一個新的變量時,僅僅是給該對象增添了一個別名。所以,對該別名的操作也會作用到原對象上去,所以通過newStudent.sex給對象student添加屬性可以實現(xiàn)。然而,更多的時候我們希望newStudent和student對象是獨立的,那么就需要生成一個原對象的副本,請看下面的例子:
var cloneObj = function(obj){ var str, newobj = obj.constructor === Array ? [] : {}; if(typeof obj !== 'object'){ return; } else if(window.JSON){ str = JSON.stringify(obj), //序列化對象 newobj = JSON.parse(str); //還原 } else { for(var i in obj){ newobj[i] = typeof obj[i] === 'object' ? cloneObj(obj[i]) : obj[i]; } } return newobj; }; //測試 var student = { name:"yxz", age:25, sex:"male" }; //執(zhí)行深度克隆 var newStudent = cloneObj(student); delete newStudent.sex; console.log(newStudent); //{name:"yxz",age:25} console.log(student); //{name:"yxz",age:25,sex:"male"}
通過執(zhí)行結(jié)果可以看出newStudent已經(jīng)成為了一個克隆出來的副本,對newStudent的任何操作將不再影響student對象。
備注:JSON.stringify和parse分別為JSON對象的序列化和反序列化函數(shù),即分別負責將對象序列化成字符串和將json字符串反序列化成對象,因為這個是屬于ECMAScript5規(guī)范,所以上面程序標注部分做了一個兼容處理。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學運算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
網(wǎng)站名稱:JS對象深度克隆實例分析
標題來源:http://aaarwkj.com/article8/gghpop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、微信小程序、移動網(wǎng)站建設(shè)、網(wǎng)站營銷、定制開發(fā)、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)