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

資訊專欄INFORMATION COLUMN

JavaScript-如何實(shí)現(xiàn)克隆(clone)函數(shù)

JasonZhang / 3201人閱讀

摘要:前提知識(shí)在實(shí)現(xiàn)克隆函數(shù)之前你需要明白以下一些概念如果你已經(jīng)明白了請(qǐng)直接閱讀實(shí)現(xiàn)部分什么是值類型引用類型很多新手可能會(huì)對(duì)值類型引用類型原始類型基本類型等等名稱感到困惑這里就解釋一下這些概念一個(gè)事物是可以有多種區(qū)分形式的比如貓我們可以說它是貓科

前提知識(shí)

在實(shí)現(xiàn)克隆函數(shù)之前,你需要明白以下一些概念,如果你已經(jīng)明白了,請(qǐng)直接閱讀 “實(shí)現(xiàn)” 部分.

什么是值類型、引用類型?

很多新手可能會(huì)對(duì) “值類型”、“引用類型”、“原始類型”、“基本類型”等等名稱感到困惑. 這里就解釋一下這些概念.

一個(gè)事物是可以有多種區(qū)分形式的.

比如,貓,我們可以說它是貓科動(dòng)物,也可以說它是哺乳動(dòng)物,也可以說它是食肉動(dòng)物.

在編程語(yǔ)言的世界里也是一樣的.

在JavaScript的世界里, 數(shù)據(jù)被定義為以下 7 種 數(shù)據(jù)類型 :

6種 原始類型(又叫 基本類型):

Boolean

Null

Undefined

Number

String

Symbol

和 Object

(需要注意的是, 名詞從英文翻譯成中文,可能會(huì)出現(xiàn)多種叫法,比如“primitive type”,中文叫 “原始類型”,也有叫“基本類型”.)

另外,根據(jù)變量值傳遞的方式,我們又可以將數(shù)據(jù)區(qū)分為“值類型”和“引用類型”.

值類型 : 數(shù)據(jù)在傳遞和賦值時(shí),數(shù)據(jù)將自己復(fù)制一份給對(duì)方.

JavaScript中原始類型都屬于值類型(string, number, boolean, null, undefined, symbol).

引用類型 : 在傳遞和賦值時(shí), 數(shù)據(jù)將自身的引用(又叫“地址”、“指針”)給對(duì)方.

JavaScript中數(shù)組、函數(shù)、自定義對(duì)象,三種屬于引用類型.

更詳細(xì)的解釋請(qǐng)閱讀: //TODO: (新建文章,介紹 值類型、引用類型)

實(shí)現(xiàn)

引用類型數(shù)據(jù)都是由原始類型數(shù)據(jù)組成的,因此我們可以將引用類型數(shù)據(jù)一層層往下拆, 將里面的每一個(gè)原始類型數(shù)據(jù)賦值給新對(duì)象.

基于上述思路,我們主要對(duì) 數(shù)組、函數(shù)、自定義對(duì)象 這些引用類型的數(shù)據(jù)進(jìn)行特殊處理,

Object.prototype.clone = function(){ ?
? ? ? ? var copy = this.constructor === Array ? [] : {}; //#1

? ? ? ? for(var e in this){
                if (typeof this[e] ?=== "object") { //#2
                    copy[e] = ?this[e].clone(); 
                } else if (typeof this[e] ?=== "function") { //#3
                    copy[e] = ? this[e].bind(copy); //#5
                } else { //#4
                    copy[e] = ?this[e]; 
                }
? ? ? ? }

? ? ? ? return copy;
      }

#1: 判斷傳入的對(duì)象是數(shù)組類型的對(duì)象,還是其它類型的對(duì)象.
#2、#3: Array 和 Object 的 typeof是 “object”, Function 的typeof 是“function”. 它們都是引用類型,因此特殊處理.

//typeof 用于引用類型的數(shù)據(jù)
typeof Array(); // "object"
typeof Object(); // "object"
typeof function(){}; // "function" 

#4: 原始類型直接賦值.
#5: 創(chuàng)建一個(gè)新的函數(shù),并且將新函數(shù)與 copy 對(duì)象綁定.

參考資料:

JavaScript 數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)
Difference between a Value Type and a Reference Type
Javascript之實(shí)現(xiàn)一個(gè)clone克隆函數(shù)
JavaScript: clone a function
Function.prototype.bind()

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

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

相關(guān)文章

  • [譯] 為什么原型繼承很重要

    摘要:使用構(gòu)造函數(shù)的原型繼承相比使用原型的原型繼承更加復(fù)雜,我們先看看使用原型的原型繼承上面的代碼很容易理解。相反的,使用構(gòu)造函數(shù)的原型繼承像下面這樣當(dāng)然,構(gòu)造函數(shù)的方式更簡(jiǎn)單。 五天之前我寫了一個(gè)關(guān)于ES6標(biāo)準(zhǔn)中Class的文章。在里面我介紹了如何用現(xiàn)有的Javascript來模擬類并且介紹了ES6中類的用法,其實(shí)它只是一個(gè)語(yǔ)法糖。感謝Om Shakar以及Javascript Room中...

    xiao7cn 評(píng)論0 收藏0
  • JavaScript 深拷貝性能分析

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

    MyFaith 評(píng)論0 收藏0
  • Javascript的對(duì)象拷貝

    摘要:的對(duì)象只是指向內(nèi)存中某個(gè)位置的指針。所以在拷貝中的對(duì)象時(shí),要根據(jù)實(shí)際情況做一些考慮。結(jié)論中最好的對(duì)象拷貝的算法,很大程度上取決于其使用環(huán)境,以及你需要拷貝的對(duì)象類型。 翻譯:瘋狂的技術(shù)宅原文:https://smalldata.tech/blog/2... 本文首發(fā)微信公眾號(hào):前端先鋒歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 在開始之前,我先普及一些基礎(chǔ)知識(shí)。Javascrip...

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

    摘要:引用類型之所以會(huì)出現(xiàn)深淺拷貝的問題,實(shí)質(zhì)上是由于對(duì)基本類型和引用類型的處理不同。另外方法可以視為數(shù)組對(duì)象的淺拷貝。上面描述過的復(fù)雜問題依然存在,可以說是最簡(jiǎn)陋但是日常工作夠用的深拷貝方式。 一直想梳理下工作中經(jīng)常會(huì)用到的深拷貝的內(nèi)容,然而遍覽了許多的文章,卻發(fā)現(xiàn)對(duì)深拷貝并沒有一個(gè)通用的完美實(shí)現(xiàn)方式。因?yàn)閷?duì)深拷貝的定義不同,實(shí)現(xiàn)時(shí)的edge case過多,在深拷貝的時(shí)候會(huì)出現(xiàn)循環(huán)引用等問...

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

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

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

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

0條評(píng)論

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