国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript對象克隆

douzifly / 2115人閱讀

摘要:原始類型對象指的是字符串?dāng)?shù)值布爾值,引用類型對象指的是數(shù)組對象函數(shù)。既然對象分為這兩類,他們的復(fù)制克隆也是有差別的。總結(jié)根據(jù)上面的情況,另外,克隆引用對象必須采用完整克隆深度克隆,包括對象的值也是一個(gè)對象也要進(jìn)行完整克隆深度克隆。

前言

之前有人問我如何克隆一個(gè)JS對象,我當(dāng)時(shí)沒答上來;過后我查資料弄懂了這個(gè)問題,現(xiàn)在整理成文。

正文

JavaScript的一切實(shí)例都是對象,但他們也分為原始類型和引用類型。原始類型對象指的是字符串(String)、數(shù)值(Number)、布爾值(Boolean)、undefinednull,引用類型對象指的是數(shù)組(Array)、對象(Object)、函數(shù)(Function)。
既然對象分為這兩類,他們的復(fù)制克隆也是有差別的。普通對象存儲的是對象的實(shí)際數(shù)據(jù),而引用對象存儲的是對象的引用地址,而把對象的實(shí)際內(nèi)容多帶帶存放。下面我們就來看看他們克隆的區(qū)別。

原始類型對象的克隆 字符串的克隆
var x="abc";
var y=x;
y="xyz";
 
alert(x);   // "abc"
alert(y);   // "xyz"
數(shù)值的克隆
var x=1;
var y=x;
y=2;

alert(x);   // 1
alert(y);   // 2
布爾值的克隆
var x=true;
var y=x;
y=false;
 
alert(x);   // true
alert(y);   // false

我們可以看出來原始類型的克隆很簡單,只需要一個(gè)=賦值就可以了;undefinednull也是同理。

引用類型的對象克隆 數(shù)值的克隆

如果采用普通克隆:

var x=[1,2];
var y=x;
y.push(3);

alert(x);   // 1,2,3
alert(y);   // 1,2,3

由上可知,原始數(shù)組x,克隆數(shù)組y,修改了克隆數(shù)組y,但也同時(shí)修改了原始數(shù)組x,這就是引用對象的特點(diǎn)。那么怎樣才能達(dá)到完整的數(shù)組克隆呢?

var x=[1,2];
var y=[];
var i=0;
var j=x.length;
for(;i

這樣,兩個(gè)數(shù)值就互不干擾,實(shí)現(xiàn)了完整數(shù)組克隆。

對象的克隆

和數(shù)組的克隆同理,對象的完整克隆如下:

var x={a:2,b:4};
var y={};
var i;
for(i in x){
    y[i]=x[i];
}
y.c=6;
 
console.log(x);   // Object {a: 2, b: 4} 
console.log(y);   // Object {a: 2, b: 4, c: 6}
函數(shù)的克隆
var x=function(){alert(1);};
var y=x;
y=function(){alert(2);};

console.log(x);   // function(){alert(1);};
console.log(y);   // function(){alert(2);};

函數(shù)的克隆與原始類型對象克隆的方式類似;只需要使用=就可以了。

總結(jié)

根據(jù)上面的情況,另外,克隆引用對象必須采用完整克隆(深度克隆),包括對象的值也是一個(gè)對象也要進(jìn)行完整克隆(深度克隆)。所以,我們可以總結(jié)并封裝一個(gè)通用的克隆方法:

function clone(obj){
    var o,i,j,k;
    if(typeof(obj)!=="object" || obj===null)return obj;
    if(obj instanceof Array){
        o=[];
        i=0;j=obj.length;
        for(;i
最后

這是我個(gè)人的博客,剛剛搭建好,歡迎大家來看看:Sunny的博客

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/80155.html

相關(guān)文章

  • 【轉(zhuǎn)】JavaScript 對象的深度克隆

    摘要:在聊以下簡稱深度克隆之前,我們先來了解一下中對象的組成。克隆或者拷貝分為種淺度克隆深度克隆。淺度克隆基本類型為值傳遞,對象仍為引用傳遞。 該文轉(zhuǎn)載自http://www.cnblogs.com/zichi/p/4568150.html,有部分修改。 在聊JavaScript(以下簡稱js)深度克隆之前,我們先來了解一下js中對象的組成。在 js 中一切實(shí)例皆是對象,具體分為 原始類型 ...

    JowayYoung 評論0 收藏0
  • javascript對象的常用方法,深克隆和淺克隆以及凍結(jié),擴(kuò)展,密封三大屬性的區(qū)別

    摘要:它將返回目標(biāo)對象。封閉對象方法判斷一個(gè)對象是否被密封。為源對象為修改的屬性名或設(shè)置,同上方法返回一個(gè)給定對象自身可枚舉屬性的鍵值對數(shù)組方法返回指定對象上一個(gè)自有屬性對應(yīng)的屬性描述符方法判斷兩個(gè)值是否是相同的值。 對象作為引用類型,工作中免不了復(fù)制對象,下面來看看克隆的方法 Object.assign() 方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對象復(fù)制到目標(biāo)對象。它將返回目標(biāo)對象。淺...

    gplane 評論0 收藏0
  • 克隆

    摘要:結(jié)構(gòu)化算法優(yōu)于的地方優(yōu)于的地方結(jié)構(gòu)化克隆可以復(fù)制對象。的克隆粒度將會(huì)跟原始對象相同,并且復(fù)制出來相同的像素?cái)?shù)據(jù)。企圖去克隆節(jié)點(diǎn)同樣會(huì)拋出異常。消息通道的傳遞是異步的,使用結(jié)構(gòu)化克隆算法。 JavaScript 深拷貝性能分析(漢化版) JavaScript 深拷貝性能分析 Object.assign() Object.assign 方法只會(huì)拷貝源對象自身的并且可枚舉的屬性到目標(biāo)對象。...

    freecode 評論0 收藏0
  • javascript設(shè)計(jì)模式與開發(fā)實(shí)踐(二)- 封裝和原型模式

    摘要:對象會(huì)記住它的原型給對象提供了一個(gè)名為的隱藏屬性,某個(gè)對象的屬性默認(rèn)會(huì)指向它的構(gòu)造器的原型對象,即。我們通過代碼來驗(yàn)證再來實(shí)際上,就是對象跟對象構(gòu)造器的原型聯(lián)系起來的紐帶切記這句話,對未來理解原型鏈很有幫助。 封裝 封裝數(shù)據(jù) 在許多語言的對象系統(tǒng)中,封裝數(shù)據(jù)是由語法解析來實(shí)現(xiàn)的,這些語言也許提供了 private、public、protected 等關(guān)鍵字來提供不同的訪問權(quán)限。例如:j...

    luxixing 評論0 收藏0
  • JavaScript 深拷貝性能分析

    摘要:它接受任意數(shù)量的源對象,枚舉它們的所有屬性并分配給。所以現(xiàn)在怎么辦有幾種方法可以創(chuàng)建一個(gè)對象的深拷貝。為了防止發(fā)生任何意外,請使用而不是。我想測量哪種方法是最高性能的。圖表以下是,和中不同技術(shù)的性能。 原文:Deep-copying in JavaScript - DasSur.ma 如何在 JavaScript 中拷貝一個(gè)對象?對于這個(gè)很簡單的問題,但是答案卻不簡單。 引用傳值 在...

    MyFaith 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<