成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

在js中的深復(fù)制實(shí)現(xiàn)方法

Alliot / 3355人閱讀

摘要:針對(duì)本話題,我在年月發(fā)布了新的文章深入剖析的深復(fù)制要實(shí)現(xiàn)深復(fù)制有很多辦法,比如最簡(jiǎn)單的辦法有上面這種方法好處是非常簡(jiǎn)單易用,但是壞處也顯而易見(jiàn),這會(huì)拋棄對(duì)象的,也就是深復(fù)制之后,無(wú)論這個(gè)對(duì)象原本的構(gòu)造函數(shù)是什么,在深復(fù)制之后都會(huì)變成。

  

針對(duì)本話題,我在2015年5月發(fā)布了新的文章:深入剖析 JavaScript 的深復(fù)制

要實(shí)現(xiàn)深復(fù)制有很多辦法,比如最簡(jiǎn)單的辦法有:

var cloneObj = JSON.parse(JSON.stringify(obj));

上面這種方法好處是非常簡(jiǎn)單易用,但是壞處也顯而易見(jiàn),這會(huì)拋棄對(duì)象的constructor,也就是深復(fù)制之后,無(wú)論這個(gè)對(duì)象原本的構(gòu)造函數(shù)是什么,在深復(fù)制之后都會(huì)變成Object。另外諸如RegExp對(duì)象是無(wú)法通過(guò)這種方式深復(fù)制的。

所以這里我將介紹一種,我自認(rèn)為很優(yōu)美的深復(fù)制方法,當(dāng)然可能也存在問(wèn)題。如果你發(fā)現(xiàn)了我的實(shí)現(xiàn)方法有什么問(wèn)題,請(qǐng)及時(shí)讓我知道~

先決條件:
1. 對(duì)于任何對(duì)象,它可能的類型有Boolean, Number, Date, String, RegExp, Array 以及 Object(所有自定義的對(duì)象全都繼承于Object
2. 我們必須保留對(duì)象的構(gòu)造函數(shù)信息(從而使新對(duì)象可以使用定義在prototype上的函數(shù))

最重要的一個(gè)函數(shù):

Object.prototype.clone = function () {
    var Constructor = this.constructor;
    var obj = new Constructor();

    for (var attr in this) {
        if (this.hasOwnProperty(attr)) {
            if (typeof(this[attr]) !== "function") {
                if (this[attr] === null) {
                    obj[attr] = null;
                }
                else {
                    obj[attr] = this[attr].clone();
                }
            }
        }
    }
    return obj;
};

定義在Object.prototype上的clone()函數(shù)是整個(gè)方法的核心,對(duì)于任意一個(gè)非js預(yù)定義的對(duì)象,都會(huì)調(diào)用這個(gè)函數(shù)。而對(duì)于所有js預(yù)定義的對(duì)象,如Number,Array等,我們就要實(shí)現(xiàn)一個(gè)輔助clone()函數(shù)來(lái)實(shí)現(xiàn)完整的克隆過(guò)程:

/* Method of Array*/
Array.prototype.clone = function () {
    var thisArr = this.valueOf();
    var newArr = [];
    for (var i=0; i

可能直接定義在預(yù)定義對(duì)象的方法上,讓人感覺(jué)會(huì)有些問(wèn)題。但在我看來(lái)這是一種優(yōu)美的實(shí)現(xiàn)方式。

同時(shí)我也在開(kāi)發(fā)一個(gè)插件,主要的思想也就是擴(kuò)展預(yù)定義對(duì)象的方法。
這個(gè)插件叫JustJS(Github項(xiàng)目地址)
有以下一些特性:
1. 同時(shí)支持Web前端和node.js使用。
2. 直接對(duì)預(yù)定義對(duì)象的方法進(jìn)行擴(kuò)展
3. 使用 J(function(){...}) 語(yǔ)句塊,決不污染全局命名空間。
目前只寫了一小部分,同時(shí)也寫了些簡(jiǎn)單的文檔,有興趣的同學(xué)可以看一下,也可以加入我,Fork我的項(xiàng)目,喜歡的同學(xué)還可以給Star

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/78083.html

相關(guān)文章

  • JS 的深拷貝與淺拷貝

    摘要:什么是深拷貝淺拷貝見(jiàn)名知義,無(wú)論是深拷貝還是淺拷貝,都是的問(wèn)題。使用如下以上就是關(guān)于中的深拷貝與淺拷貝的知識(shí)和如何進(jìn)行深拷貝的知識(shí)了,如果有錯(cuò)或者有其他方式的話,歡迎在下面留言評(píng)論啦 前言 最近在寫項(xiàng)目的時(shí)候涉及到一些父子組件傳遞個(gè)對(duì)象或者數(shù)組通信啥的,或者是直接復(fù)制添加對(duì)象啥的,直接使用賦值的時(shí)候總會(huì)出錯(cuò)。一查原來(lái)是淺拷貝的問(wèn)題,就從網(wǎng)上找了點(diǎn)資料,匯總到這里來(lái)了。 1 什么是深拷貝...

    ztyzz 評(píng)論0 收藏0
  • 深入剖析 JavaScript 的深復(fù)制

    摘要:的不能算作深復(fù)制,但它至少比直接賦值來(lái)得深一些,它創(chuàng)建了一個(gè)新的對(duì)象。它們的主要用途是對(duì)存在環(huán)的對(duì)象進(jìn)行深復(fù)制。比如源對(duì)象中的子對(duì)象在深復(fù)制以后,對(duì)應(yīng)于。希望這篇文章對(duì)你們有幫助深復(fù)制方法所謂擁抱未來(lái)的深復(fù)制實(shí)現(xiàn)參考資料 本文最初發(fā)布于我的個(gè)人博客:咀嚼之味 一年前我曾寫過(guò)一篇 Javascript 中的一種深復(fù)制實(shí)現(xiàn),當(dāng)時(shí)寫這篇文章的時(shí)候還比較稚嫩,有很多地方?jīng)]有考慮仔細(xì)。...

    gclove 評(píng)論0 收藏0
  • js深淺復(fù)制

    摘要:總結(jié)綜上所述,數(shù)組的深拷貝比較簡(jiǎn)單,方法沒(méi)有什么爭(zhēng)議,對(duì)象的深拷貝,比較好的方法是用的方法實(shí)現(xiàn),或者遞歸實(shí)現(xiàn),比較簡(jiǎn)單的深復(fù)制可以使用實(shí)現(xiàn)參考資料知乎中的深拷貝和淺拷貝深入剖析的深復(fù)制 深淺復(fù)制對(duì)比 因?yàn)镴avaScript存儲(chǔ)對(duì)象都是存地址的,所以淺復(fù)制會(huì)導(dǎo)致 obj 和obj1 指向同一塊內(nèi)存地址。我的理解是,這有點(diǎn)類似數(shù)據(jù)雙向綁定,改變了其中一方的內(nèi)容,都是在原來(lái)的內(nèi)存基礎(chǔ)上做...

    Apollo 評(píng)論0 收藏0
  • JS的深拷貝與淺拷貝

    摘要:深拷貝和淺拷貝最根本的區(qū)別在于是否是真正獲取了一個(gè)對(duì)象的復(fù)制實(shí)體,而不是引用,深拷貝在計(jì)算機(jī)中開(kāi)辟了一塊內(nèi)存地址用于存放復(fù)制的對(duì)象,而淺拷貝僅僅是指向被復(fù)制的內(nèi)存地址,如果原地址中對(duì)象被改變了,那么淺拷貝出來(lái)的對(duì)象也會(huì)相應(yīng)改變。 深拷貝和淺拷貝最根本的區(qū)別在于是否是真正獲取了一個(gè)對(duì)象的復(fù)制實(shí)體,而不是引用, 深拷貝在計(jì)算機(jī)中開(kāi)辟了一塊內(nèi)存地址用于存放復(fù)制的對(duì)象, 而淺拷貝僅僅是指向被...

    wuyumin 評(píng)論0 收藏0
  • JS的深拷貝與淺拷貝

    摘要:中的深拷貝與淺拷貝說(shuō)到深淺拷貝的時(shí)候就不得不說(shuō)一下中的變量類型了基本類型按值存放在棧內(nèi)存中的簡(jiǎn)單數(shù)據(jù)段可以直接訪問(wèn)引用類型存放在堆內(nèi)存中的對(duì)象變量保存的是一個(gè)指向存放數(shù)據(jù)位置的指針訪問(wèn)引用類型的值時(shí)首先從棧中獲取到存放該數(shù)據(jù)位置的指針然后再 JS中的深拷貝與淺拷貝 說(shuō)到深淺拷貝的時(shí)候就不得不說(shuō)一下JS中的變量類型了: 基本類型: undefined、null、boolean、numb...

    ARGUS 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<