Prototype使用指南之enumerable.js
更新時(shí)間:2007年01月10日 00:00:00 作者:
Enumerable是一個(gè)抽象對(duì)象(需要說(shuō)明的是,javascript中并沒(méi)有類的概念,所指的類也就是一個(gè)函數(shù),繼承一般指的是一個(gè)對(duì)象(父)將它的方法屬性copy(通過(guò)Object.extend, copy的是引用)到子類(函數(shù))的prototype屬性(一個(gè)對(duì)象)中) Enumerable不能直接使用,它被很多枚舉類型(Hash、Array、Range等)所繼承,繼承的類型都要實(shí)現(xiàn)一個(gè)_each方法,提供具體類型的枚舉方法 Enumerable為其他子類提供了如下的方法: each(iterator): iterator是一個(gè)函數(shù)對(duì)象, 這個(gè)方法調(diào)用具體類型的_each方法對(duì)自身包含的每個(gè)對(duì)象調(diào)用iterator,例如如果Enumerable具體指的是一個(gè)Array,eg: var a=[2,3,4], 則a.each(iterator)方法將依次調(diào)用iterator(2,0) ,iterator(3,1), iterator(4,3),其中第二個(gè)參數(shù)指的是索引。這個(gè)方法幾乎在Enumerable中的每個(gè)方法中都要用到 eachSlice(number, iterator):將Enumerable類型對(duì)象每個(gè)每個(gè)按照number分開(kāi),例如[1,2,3,4,5].eachSlice(3)=>[[1,2,3],[4,5]], 沒(méi)有提供iterator, 則iterator=Prototype.K: function(k){return k},Prototype中的很多iterator默認(rèn)值都是這個(gè),或者是Prototype.emptyFunction: function() {},其實(shí)實(shí)際上返回的是[iterator([1,2,3]),iterator([4,5])] all(iterator): 對(duì)Enumerable類型中的每個(gè)值調(diào)用iterator,如果其中有一個(gè)返回false,則返回false,否則返回true,相當(dāng)于判斷是否每個(gè)值執(zhí)行iterator都是"true" any(iterator): 跟all相反,判斷是否每個(gè)值都是"false"(是否有一個(gè)值是true) collect(iterator)/map: 對(duì)每個(gè)值調(diào)用iterator,將結(jié)果組成一個(gè)新的數(shù)組返回 detect(iterator)/find: 對(duì)每個(gè)值調(diào)用iterator,如果有一個(gè)不為false,則返回這個(gè)執(zhí)行iterator后不為false的值(不是返回執(zhí)行iterator后的值),相當(dāng)于找出第一個(gè)真值 findAll(iterator)/select: 相當(dāng)于detect, 但是找出所有的真值,返回一個(gè)數(shù)組 grep(pattern, iterator):返回所以符合pattern的值,iterator提供的話,則返回執(zhí)行iterator的值 include(object)/member: 數(shù)組中是否包含object inGroupsOf(number, fillWith): eachSlice的變異版本,按照number將對(duì)象分開(kāi),如果分開(kāi)后的數(shù)組的最后一個(gè)值的length小于number, 則用fillwith填充, 例如[1,2,3,4,5].inGroupsOf(3)=>[[1,2,3],[4,5,null]] inject(memo, iterator): 注入 invoke(method): 調(diào)用 max(iterator): 最大值 min(iterator): 最小值 partition(iterator): 分離 pluck(property): 采集 reject(iterator): 不合格的產(chǎn)品, 于findAll相反 sortBy(iterator): 根據(jù)iterator排序,如果調(diào)用的對(duì)象是Array的話,直接調(diào)用內(nèi)置的sort(iterator)就行了 toArray()/entries: 將調(diào)用對(duì)象的每個(gè)值組成一個(gè)數(shù)組返回 zip(): 例如[2,3,4].zip([5,6,7])=>[[2,5],[3,6],[4,7]], 如果最后一個(gè)參數(shù)類型為function,將返回[iterator([2,5]),iterator([3,6]),iterator([4,7])], inspect(): Enumerable對(duì)象的字符串表示 NND的,原來(lái)Enumerable有這么多函數(shù),感覺(jué)作者是不是學(xué)習(xí)Ruby太過(guò)了,把什么方法都往Prototype上挪,搞的我們學(xué)習(xí)的也辛苦,Prototype文件也變得越來(lái)越大,浪費(fèi)帶寬啊 唉,發(fā)現(xiàn)其中很多函數(shù)越解釋越難懂,大家還是多多看看源代碼理解吧,偶的文字表達(dá)能力真的不乍的,有的實(shí)在不知道怎么表達(dá), 希望大家還是只是把本文當(dāng)成一個(gè)不正規(guī)的參考,有什么問(wèn)題還是看源代碼理解,不然誤導(dǎo)了你我可不負(fù)責(zé)啊
相關(guān)文章
prototype Element學(xué)習(xí)筆記(篇二)
這一篇主要是要總論Element的所有函數(shù)。2008-10-10JavaScript語(yǔ)法著色引擎(demo及打包文件下載)
JavaScript語(yǔ)法著色引擎(demo及打包文件下載)...2007-06-06Prototype 學(xué)習(xí) 工具函數(shù)學(xué)習(xí)($w,$F方法)
Prototype $w $F使用方法2009-07-07Prototype的Class.create函數(shù)解析
Prototype中的類的創(chuàng)建,一般使用Class.create方法來(lái)創(chuàng)建,例如PeriodicalExecuter類型。使用的時(shí)候通過(guò)調(diào)用new PeriodicalExecuter(xxx)來(lái)生成對(duì)象。2011-09-09Prototype源碼淺析 String部分(三)之HTML字符串處理
現(xiàn)在,String部分轉(zhuǎn)入具體的關(guān)聯(lián)應(yīng)用,分別對(duì)應(yīng)HTML字符串,JSON字符串和HTML中的腳本字符串2012-01-01prototype 源碼中文說(shuō)明之 prototype.js
prototype 源碼中文說(shuō)明之 prototype.js...2006-09-09prototype 1.5相關(guān)知識(shí)及他人筆記
prototype 1.5相關(guān)知識(shí)及他人筆記...2006-12-12