Prototype使用指南之base.js
更新時(shí)間:2007年01月10日 00:00:00 作者:
base.js中包含下面的內(nèi)容 類的創(chuàng)建與繼承: Class.create(): 創(chuàng)建一個(gè)類,例如 person=Class.create() Object.extend(destination, source): 把source中方法屬性copy到destination(使用for propertyin source),需要注意的是,javascript中除了基本類型(Number, Boolean)外都是引用類型,所以這種copy一般只是copy引用而已,destination和source還是指向同一個(gè)方法或?qū)ο髮傩?function array object) 這面向?qū)ο蟮木幊讨?,一般通過Class.create新建一個(gè)類,如果這個(gè)類繼承于領(lǐng)一個(gè)類,一般使用Object.extend(class.prototype, parentClass.prototype)或者Object.extend(class.prototype, aparentClassInstance)
Object構(gòu)造函數(shù)的擴(kuò)展: Object是其他對(duì)象實(shí)例的構(gòu)造函數(shù)(var a=new Object()),也是所有其他類的父類,對(duì)Object直接擴(kuò)展(注意不是擴(kuò)展Object.prototype,擴(kuò)展Object.prototype相當(dāng)于添加實(shí)例方法)相當(dāng)于為Object類添加靜態(tài)方法 Object.inspect(object): 調(diào)用object的inspect(如果定義了)或toString方法,返回一個(gè)對(duì)象的字符串表示 Object.keys(object): 返回一個(gè)對(duì)象的所有屬性和方法名稱組成的數(shù)組, 例如Object.keys(document.body) Object.values(object):返回一個(gè)對(duì)象的所有屬性和方法的值組成的數(shù)組, 例如Object.values(docuement) Object.clone(object): 返回一個(gè)對(duì)象的clone版本,其實(shí)是執(zhí)行Object.extent方法把object中的方法屬性copy到一個(gè)新對(duì)象中,然后返回這個(gè)對(duì)象
函數(shù)邦定: 定義了Function對(duì)象的兩個(gè)方法,bind和bindAsEventListener,這兩個(gè)方法是一個(gè)函數(shù)的兩個(gè)方法,對(duì)于java、c#程序員來說,看到這個(gè)也許感到很驚訝,因?yàn)樵谒麄兛磥砗瘮?shù)只是一個(gè)程序語句組織結(jié)構(gòu)而已--->怎么還有方法,而且還可以擴(kuò)展? 這也是javascript等腳本語言相對(duì)于java等一個(gè)非常強(qiáng)大的功能,函數(shù)也是一個(gè)對(duì)象,函數(shù)名就是這個(gè)對(duì)象的名稱,只要你愿意,你也可以使用new Function(...)來定義函數(shù),所以為函數(shù)定義方法也就很正常不過了 這兩個(gè)函數(shù)的主要作用是為了解決使用javascript面向?qū)ο箫L(fēng)格編程中this的引用問題,在javasctipt中this關(guān)鍵字始終指向調(diào)用該函數(shù)的對(duì)象或者指向使用call,apply方法指定的對(duì)象(具體這方面的知識(shí)可以自己google一下,以下系列對(duì)prototype的介紹也假設(shè)讀者對(duì)javascript語言比較熟悉了,如果不熟悉可以找本javascript權(quán)威指南這本書看看) 要理解這個(gè)問題首先要理解 始終指向 這個(gè)問題,就是this這個(gè)關(guān)鍵字比較特殊,不能把他當(dāng)成一般的變量名看待,最常見的一個(gè)錯(cuò)誤就是在返回函數(shù)的調(diào)用中使用this,例如return function(){this.aMethod()}, 當(dāng)你下次調(diào)用這個(gè)返回的匿名方法時(shí),這個(gè)this引用的內(nèi)容又指向了調(diào)用這個(gè)函數(shù)的對(duì)象了,記住的一點(diǎn)的this是個(gè)關(guān)鍵字,不是變量名,不會(huì)產(chǎn)生閉包 對(duì)Number的擴(kuò)展(注意num也可以看成對(duì)象,其實(shí)是在使用的時(shí)候系統(tǒng)自動(dòng)打包成Number對(duì)象): toColorPart:把數(shù)字轉(zhuǎn)換為可以用于表示color的16進(jìn)制值:例如 7.toColorPart()=>"07",28.toColorPart()=>"1C" succ: 返回num++, 但不改變num本身的值,其實(shí)就是 return this+1 times:對(duì)從0到這個(gè)數(shù)字輪流調(diào)用一個(gè)函數(shù), 例如function a(n){docuement.write(n)}, 10.times(a), 將顯示012345678910, 注意函數(shù)也是一個(gè)對(duì)象,而且與其他對(duì)象并沒有實(shí)質(zhì)的區(qū)別
Try對(duì)象: Try對(duì)象提供了一個(gè)很有趣的功能, 先看一下如下的代碼: var Ajax = { getTransport: function() { return Try.these( function() {return new XMLHttpRequest()}, function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')} ) || false; } } Try對(duì)象提供了一個(gè)方法these, 這個(gè)方法接受一個(gè)函數(shù)類型的參數(shù)列表,然后輪流執(zhí)行這些函數(shù),當(dāng)其中一個(gè)函數(shù)沒有產(chǎn)生錯(cuò)誤時(shí),就停止執(zhí)行,并且返回這個(gè)函數(shù)返回的值,自己慢慢體會(huì)吧 PeriodicalExecuter(周期性執(zhí)行器)對(duì)象 這個(gè)對(duì)象是對(duì)setInterval方法的簡單封裝,使用方法如下 var a=new PeriodicalExecuter(callback, frequency) //callback: 執(zhí)行的函數(shù)名 frequency: 每次執(zhí)行的時(shí)間間隔 a.stop()
Object構(gòu)造函數(shù)的擴(kuò)展: Object是其他對(duì)象實(shí)例的構(gòu)造函數(shù)(var a=new Object()),也是所有其他類的父類,對(duì)Object直接擴(kuò)展(注意不是擴(kuò)展Object.prototype,擴(kuò)展Object.prototype相當(dāng)于添加實(shí)例方法)相當(dāng)于為Object類添加靜態(tài)方法 Object.inspect(object): 調(diào)用object的inspect(如果定義了)或toString方法,返回一個(gè)對(duì)象的字符串表示 Object.keys(object): 返回一個(gè)對(duì)象的所有屬性和方法名稱組成的數(shù)組, 例如Object.keys(document.body) Object.values(object):返回一個(gè)對(duì)象的所有屬性和方法的值組成的數(shù)組, 例如Object.values(docuement) Object.clone(object): 返回一個(gè)對(duì)象的clone版本,其實(shí)是執(zhí)行Object.extent方法把object中的方法屬性copy到一個(gè)新對(duì)象中,然后返回這個(gè)對(duì)象
函數(shù)邦定: 定義了Function對(duì)象的兩個(gè)方法,bind和bindAsEventListener,這兩個(gè)方法是一個(gè)函數(shù)的兩個(gè)方法,對(duì)于java、c#程序員來說,看到這個(gè)也許感到很驚訝,因?yàn)樵谒麄兛磥砗瘮?shù)只是一個(gè)程序語句組織結(jié)構(gòu)而已--->怎么還有方法,而且還可以擴(kuò)展? 這也是javascript等腳本語言相對(duì)于java等一個(gè)非常強(qiáng)大的功能,函數(shù)也是一個(gè)對(duì)象,函數(shù)名就是這個(gè)對(duì)象的名稱,只要你愿意,你也可以使用new Function(...)來定義函數(shù),所以為函數(shù)定義方法也就很正常不過了 這兩個(gè)函數(shù)的主要作用是為了解決使用javascript面向?qū)ο箫L(fēng)格編程中this的引用問題,在javasctipt中this關(guān)鍵字始終指向調(diào)用該函數(shù)的對(duì)象或者指向使用call,apply方法指定的對(duì)象(具體這方面的知識(shí)可以自己google一下,以下系列對(duì)prototype的介紹也假設(shè)讀者對(duì)javascript語言比較熟悉了,如果不熟悉可以找本javascript權(quán)威指南這本書看看) 要理解這個(gè)問題首先要理解 始終指向 這個(gè)問題,就是this這個(gè)關(guān)鍵字比較特殊,不能把他當(dāng)成一般的變量名看待,最常見的一個(gè)錯(cuò)誤就是在返回函數(shù)的調(diào)用中使用this,例如return function(){this.aMethod()}, 當(dāng)你下次調(diào)用這個(gè)返回的匿名方法時(shí),這個(gè)this引用的內(nèi)容又指向了調(diào)用這個(gè)函數(shù)的對(duì)象了,記住的一點(diǎn)的this是個(gè)關(guān)鍵字,不是變量名,不會(huì)產(chǎn)生閉包 對(duì)Number的擴(kuò)展(注意num也可以看成對(duì)象,其實(shí)是在使用的時(shí)候系統(tǒng)自動(dòng)打包成Number對(duì)象): toColorPart:把數(shù)字轉(zhuǎn)換為可以用于表示color的16進(jìn)制值:例如 7.toColorPart()=>"07",28.toColorPart()=>"1C" succ: 返回num++, 但不改變num本身的值,其實(shí)就是 return this+1 times:對(duì)從0到這個(gè)數(shù)字輪流調(diào)用一個(gè)函數(shù), 例如function a(n){docuement.write(n)}, 10.times(a), 將顯示012345678910, 注意函數(shù)也是一個(gè)對(duì)象,而且與其他對(duì)象并沒有實(shí)質(zhì)的區(qū)別
Try對(duì)象: Try對(duì)象提供了一個(gè)很有趣的功能, 先看一下如下的代碼: var Ajax = { getTransport: function() { return Try.these( function() {return new XMLHttpRequest()}, function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')} ) || false; } } Try對(duì)象提供了一個(gè)方法these, 這個(gè)方法接受一個(gè)函數(shù)類型的參數(shù)列表,然后輪流執(zhí)行這些函數(shù),當(dāng)其中一個(gè)函數(shù)沒有產(chǎn)生錯(cuò)誤時(shí),就停止執(zhí)行,并且返回這個(gè)函數(shù)返回的值,自己慢慢體會(huì)吧 PeriodicalExecuter(周期性執(zhí)行器)對(duì)象 這個(gè)對(duì)象是對(duì)setInterval方法的簡單封裝,使用方法如下 var a=new PeriodicalExecuter(callback, frequency) //callback: 執(zhí)行的函數(shù)名 frequency: 每次執(zhí)行的時(shí)間間隔 a.stop()
您可能感興趣的文章:
- js中繼承的幾種用法總結(jié)(apply,call,prototype)
- js的2種繼承方式詳解
- 實(shí)現(xiàn)JavaScript中繼承的三種方式
- JavaScript是如何實(shí)現(xiàn)繼承的(六種方式)
- 前端開發(fā)必須知道的JS之原型和繼承
- JS繼承--原型鏈繼承和類式繼承
- Extjs學(xué)習(xí)筆記之八 繼承和事件基礎(chǔ)
- Javascript 繼承機(jī)制的實(shí)現(xiàn)
- js實(shí)現(xiàn)繼承的5種方式
- javascript的函數(shù)、創(chuàng)建對(duì)象、封裝、屬性和方法、繼承
- 深入理解JavaScript是如何實(shí)現(xiàn)繼承的
- 用JavaScript實(shí)現(xiàn)單繼承和多繼承的簡單方法
- JS仿Base.js實(shí)現(xiàn)的繼承示例
相關(guān)文章
滾動(dòng)經(jīng)典最新話題[prototype框架]下編寫
滾動(dòng)經(jīng)典最新話題[prototype框架]下編寫...2006-10-10
Prototype Date對(duì)象 學(xué)習(xí)
這個(gè)對(duì)象里面就一個(gè)toJSON方法,非常簡單2009-07-07
Prototype源碼淺析 String部分(三)之HTML字符串處理
現(xiàn)在,String部分轉(zhuǎn)入具體的關(guān)聯(lián)應(yīng)用,分別對(duì)應(yīng)HTML字符串,JSON字符串和HTML中的腳本字符串2012-01-01
Prototype Array對(duì)象 學(xué)習(xí)
這個(gè)對(duì)象擴(kuò)展了JS原生的Array對(duì)象,提供了一些基本的工具函數(shù),有些方法非常簡單,源碼里就不在注釋了。2009-07-07
Prototype Enumerable對(duì)象 學(xué)習(xí)
Enumerable是Prototype框架的基石,而Enumerable不單獨(dú)使用,在Prototype中其它對(duì)象mix了Enumerable里面的方法,這樣就可以在這些對(duì)象上應(yīng)用Enumerable的方法,這樣的對(duì)象有:Array,Hash,ObjectRange,還有一些和DOM,AJAX相關(guān)的對(duì)象。2009-07-07
動(dòng)態(tài)表格Table類的實(shí)現(xiàn)
文件名:Table.js本文件依賴于 prototype.js,prototype_ext.js,Lib.js,DataBinder.js這些文件請(qǐng)參看我的其它文章2009-08-08
Prototype String對(duì)象 學(xué)習(xí)
這個(gè)對(duì)象里面的方法就是提供了一些字符串操作的工具方法,比較重要的gsub方法,下面做了詳細(xì)的注釋,簡單的方法就不說了,一看就明白了。2009-07-07
Prototype 學(xué)習(xí) 工具函數(shù)學(xué)習(xí)($方法)
$方法——被成為瑞士軍刀$方法使用技巧。2009-07-07

