国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript深拷貝和淺拷貝詳解

2024-05-06 15:11:33
字體:
來源:轉載
供稿:網友

一、數組的深淺拷貝

在使用JavaScript對數組進行操作的時候,我們經常需要將數組進行備份,事實證明如果只是簡單的將它賦予其他變量,那么我們只要更改其中的任何一個,然后其他的也會跟著改變,這就導致了問題的發(fā)生。

這是為什么呢?

因為如果只是簡單的賦值,它只是進行了地址的引用,所以改變一個另一個也會跟著變。

var arr = ["One","Two","Three"];var arrto = arr;arrto[1] = "test";document.writeln("數組的原始值:" + arr + "<br />");//Export:數組的原始值:One,test,Threedocument.writeln("數組的新值:" + arrto + "<br />");//Export:數組的新值:One,test,Three

像上面這樣就屬于淺拷貝,那我們怎么樣才能不改變原始的呢?

方法一:js的slice函數

var arr = ["One","Two","Three"];var arrtoo = arr.slice(0);arrtoo[1] = "set Map";document.writeln("數組的原始值:" + arr + "<br />");//Export:數組的原始值:One,Two,Threedocument.writeln("數組的新值:" + arrtoo + "<br />");//Export:數組的新值:One,set Map,Three

方法二:js的concat方法

concat() 方法用于連接兩個或多個數組。

該方法不會改變現有的數組,而僅僅會返回被連接數組的一個副本。

var arr = ["One","Two","Three"];var arrtooo = arr.concat();arrtooo[1] = "set Map To";document.writeln("數組的原始值:" + arr + "<br />");//Export:數組的原始值:One,Two,Threedocument.writeln("數組的新值:" + arrtooo + "<br />");//Export:數組的新值:One,set Map To,Three

二、對象的深淺拷貝

var a={name:'yy',age:26};var b=new Object();b.name=a.name;b.age=a.age;a.name='xx';console.log(b);//Object { name="yy", age=26}console.log(a);//Object { name="xx", age=26}

或者

var deepCopy= function(source) { var result={}; for (var key in source) {  result[key] = typeof source[key]==='object'? deepCoyp(source[key]): source[key]; }  return result; }

object()方法:json格式的發(fā)明人Douglas Crockford,提出了一個object()函數,可以做到這一點。

function object(o) {    function F() {}    F.prototype = o;    return new F();  }//這個object()函數,其實只做一件事,就是把子對象的prototype屬性,指向父對象,從而使得子對象與父對象連在一起。

使用的時候,第一步先在父對象的基礎上,生成子對象:

var Doctor = object(Chinese);//然后,再加上子對象本身的屬性:Doctor.career = '醫(yī)生';//這時,子對象已經繼承了父對象的屬性了。alert(Doctor.nation); //中國

下面我們看看阮一峰的方法

比如,現在有一個對象,叫做"中國人"。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 内丘县| 贵阳市| 理塘县| 威信县| 肃宁县| 保山市| 绥宁县| 浪卡子县| 筠连县| 弥勒县| 汽车| 专栏| 平果县| 商城县| 图片| 龙里县| 麻江县| 双牌县| 无为县| 辽宁省| 山阳县| 磐安县| 邻水| 邛崃市| 桂林市| 哈尔滨市| 金川县| 类乌齐县| 河北省| 玉树县| 天津市| 射洪县| 揭阳市| 博爱县| 商丘市| 宜州市| 益阳市| 连平县| 黄大仙区| 涡阳县| 武夷山市|