Prototype使用指南之base.js
2024-09-06 12:43:56
供稿:網友
base.js中包含下面的內容 類的創建與繼承: Class.create(): 創建一個類,例如 person=Class.create() Object.extend(destination, source): 把source中方法屬性copy到destination(使用for propertyin source),需要注意的是,javascript中除了基本類型(Number, Boolean)外都是引用類型,所以這種copy一般只是copy引用而已,destination和source還是指向同一個方法或對象屬性(function array object) 這面向對象的編程中,一般通過Class.create新建一個類,如果這個類繼承于領一個類,一般使用Object.extend(class.prototype, parentClass.prototype)或者Object.extend(class.prototype, aparentClassInstance)
Object構造函數的擴展: Object是其他對象實例的構造函數(var a=new Object()),也是所有其他類的父類,對Object直接擴展(注意不是擴展Object.prototype,擴展Object.prototype相當于添加實例方法)相當于為Object類添加靜態方法 Object.inspect(object): 調用object的inspect(如果定義了)或toString方法,返回一個對象的字符串表示 Object.keys(object): 返回一個對象的所有屬性和方法名稱組成的數組, 例如Object.keys(document.body) Object.values(object):返回一個對象的所有屬性和方法的值組成的數組, 例如Object.values(docuement) Object.clone(object): 返回一個對象的clone版本,其實是執行Object.extent方法把object中的方法屬性copy到一個新對象中,然后返回這個對象
函數邦定: 定義了Function對象的兩個方法,bind和bindAsEventListener,這兩個方法是一個函數的兩個方法,對于java、c#程序員來說,看到這個也許感到很驚訝,因為在他們看來函數只是一個程序語句組織結構而已--->怎么還有方法,而且還可以擴展? 這也是javascript等腳本語言相對于java等一個非常強大的功能,函數也是一個對象,函數名就是這個對象的名稱,只要你愿意,你也可以使用new Function(...)來定義函數,所以為函數定義方法也就很正常不過了 這兩個函數的主要作用是為了解決使用javascript面向對象風格編程中this的引用問題,在javasctipt中this關鍵字始終指向調用該函數的對象或者指向使用call,apply方法指定的對象(具體這方面的知識可以自己google一下,以下系列對prototype的介紹也假設讀者對javascript語言比較熟悉了,如果不熟悉可以找本javascript權威指南這本書看看) 要理解這個問題首先要理解 始終指向 這個問題,就是this這個關鍵字比較特殊,不能把他當成一般的變量名看待,最常見的一個錯誤就是在返回函數的調用中使用this,例如return function(){this.aMethod()}, 當你下次調用這個返回的匿名方法時,這個this引用的內容又指向了調用這個函數的對象了,記住的一點的this是個關鍵字,不是變量名,不會產生閉包 對Number的擴展(注意num也可以看成對象,其實是在使用的時候系統自動打包成Number對象): toColorPart:把數字轉換為可以用于表示color的16進制值:例如 7.toColorPart()=>"07",28.toColorPart()=>"1C" succ: 返回num++, 但不改變num本身的值,其實就是 return this+1 times:對從0到這個數字輪流調用一個函數, 例如function a(n){docuement.write(n)}, 10.times(a), 將顯示012345678910, 注意函數也是一個對象,而且與其他對象并沒有實質的區別