摘要:所以我說的這些類數(shù)組對象是什么它們有一些,其中包括是一個很特殊的變量,你再所有函數(shù)體內(nèi)都可以訪問到。讓類數(shù)組對象成為一個數(shù)組當(dāng)然這個標(biāo)題是不太準(zhǔn)確的,假如我們需要將這些類數(shù)組對象變成數(shù)組一樣,我們需要建立一個新的數(shù)組。
它看起來像是一個數(shù)組,而且它有一個length屬性,然而它并不是一個數(shù)組。JavaScript有時候是一門很怪異的語言,因?yàn)槟愫茈y定義一個數(shù)組的概念而沒有什么例外的。
所以我說的這些類數(shù)組對象是什么?它們有一些,其中包括arguments,arguments是一個很特殊的變量,你再所有函數(shù)體內(nèi)都可以訪問到。
假如你在一個工具(firebug)中檢查arguments這個變量,你會注意到它打印出來像是一個數(shù)組。它有按次序排列的元素,還有一個length屬性。
var testFunction = function() { console.log(arguments); console.log(arguments.length); };
所以我在抱怨什么?嘗試arguments.shift(),報錯顯示arguments.shift() isn"t a function,但是shift()是數(shù)組的一個函數(shù)。嘗試console.log(arguments.constructor),它會打印Object(),同時假如你輸入的是[].constructor,它會打印Array[]。這是不是很奇怪?
這當(dāng)然不僅局限于arguments,看起來很多DOM集合都會返回這種對象,例如document.getElementsByTagName(), document.images, document.childNodes.在某些情況下,這些類似數(shù)組的更適合轉(zhuǎn)變?yōu)橐粋€數(shù)組。
當(dāng)然這個標(biāo)題是不太準(zhǔn)確的,假如我們需要將這些類數(shù)組對象變成數(shù)組一樣,我們需要建立一個新的數(shù)組。
var testFunction = function() { // Create a new array from the contents of arguments var args = Array.prototype.slice.call(arguments); var a = args.shift(); console.log("The first argument is: %s", a); // send the remaining arguments to some other function someOtherFunction(args); };
顯然,關(guān)鍵的地方在Array.prototype.slice.call(arguments),拆開它仔細(xì)每個部分。
Array 這是我們想要的base object的名稱
prototype 這可以被認(rèn)為是一個數(shù)組實(shí)例方法的命名空間
slice 提取一個數(shù)組的一部分,并返回一個新的數(shù)組,沒有一個開始和結(jié)束索引,它只返回數(shù)組的副本.
call 這是一個非常有用的函數(shù),允許你在調(diào)用一個對象的函數(shù),然后在另一個函數(shù)的上下文中使用
另一個方面,如果你曾經(jīng)使用原型框架,你可以通過$A()轉(zhuǎn)化這些類數(shù)組對象成為數(shù)組。
談到$A,如果你不喜歡打上面那么長的字符串代碼,并且你不使用Prototype。然后,你可以創(chuàng)建一條捷徑,就像Prototype folks:
var $A = function(obj) { return Array.prototype.slice.call(obj); }; // Example usage: $A(document.getElementsByTagName("li"));
原文地址:Array-like Objects in JavaScript
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/86425.html
摘要:本文將會深入分析的引擎的內(nèi)部實(shí)現(xiàn)。該引擎使用在谷歌瀏覽器內(nèi)部。同其他現(xiàn)代引擎如或所做的一樣,通過實(shí)現(xiàn)即時編譯器在執(zhí)行時將代碼編譯成機(jī)器代碼。這可使正常執(zhí)行期間只發(fā)生相當(dāng)短的暫停。 原文 How JavaScript works: inside the V8 engine + 5 tips on how to write optimized code 幾周前我們開始了一個系列博文旨在深入...
摘要:引擎可以是一個標(biāo)準(zhǔn)的解釋器,也可以是一個將編譯成某種形式的字節(jié)碼的即時編譯器。和其他引擎最主要的差別在于,不會生成任何字節(jié)碼或是中間代碼。不使用中間字節(jié)碼的表示方式,就沒有必要用解釋器了。 原文地址:https://blog.sessionstack.com... showImg(https://segmentfault.com/img/bVVwZ8?w=395&h=395); 數(shù)周之...
摘要:至于,其只是以數(shù)組的方傳入?yún)?shù),其它部分是一樣的,如下它們也可用于在中的類繼承中,調(diào)用父級構(gòu)造器。間接調(diào)用,調(diào)用了父級構(gòu)造器對比方法和,它倆都立即執(zhí)行了函數(shù),而函數(shù)返回了一個新方法,綁定了預(yù)先指定好的,并可以延后調(diào)用。 其實(shí)this是一個老生常談的問題了。關(guān)于this的文章非常多,其實(shí)我本以為自己早弄明白了它,不過昨天在做項(xiàng)目的過程中,還是出現(xiàn)了一絲疑惑,想到大概之前在JavaScri...
摘要:本系列的第一篇文章著重提供一個關(guān)于引擎運(yùn)行時和調(diào)用棧的概述。在硬件層面,計(jì)算機(jī)內(nèi)存由大量的觸發(fā)器組成。每個觸發(fā)器包含幾個晶體管能夠存儲一個比特譯注位??梢酝ㄟ^唯一標(biāo)識符來訪問單個觸發(fā)器,所以可以對它們進(jìn)行讀寫操作。比特稱為個字節(jié)。 原文 How JavaScript works: memory management + how to handle 4 common memory lea...
摘要:學(xué)習(xí)之路學(xué)習(xí)之路安裝環(huán)境起步開發(fā)工具自動編譯文件中的數(shù)據(jù)類型中的函數(shù)中類的定義繼承中的繼承中的繼承類的靜態(tài)屬性和靜態(tài)方法類的多態(tài)的抽象類中的接口中的泛型學(xué)習(xí)之路安裝環(huán)境查看版本起步新建通過命令編譯此時路徑下 ...
閱讀 3806·2021-11-12 10:36
閱讀 3891·2021-09-22 15:48
閱讀 3596·2019-08-30 15:54
閱讀 2668·2019-08-29 16:44
閱讀 2417·2019-08-29 16:08
閱讀 2490·2019-08-29 16:06
閱讀 1358·2019-08-29 15:21
閱讀 3290·2019-08-29 12:39