從 prototype.js 深入學(xué)習(xí) javascript 的面向?qū)ο筇匦?/p>
js是一門很強(qiáng)大的語(yǔ)言,靈活,方便。 目前我接觸到的語(yǔ)言當(dāng)中,從語(yǔ)法角度上講,只有 Ruby 比它更爽。
不過(guò)我接觸的動(dòng)態(tài)語(yǔ)言只有: js ruby python flash的as 簡(jiǎn)單的幾門, 應(yīng)該算是井底之蛙之見(jiàn)。
js 語(yǔ)法成分簡(jiǎn)單,沒(méi)有 ruby 語(yǔ)言復(fù)雜。所以有時(shí)候我覺(jué)得她更干凈(Ruby Fans 不要攻擊我哦,我也是很愛(ài)很愛(ài)很愛(ài)Ruby的)!
prototype
.js 無(wú)疑是 js的漂亮之作,從它身上應(yīng)該可以學(xué)到一些東西。
如果你用 js 在頁(yè)面僅僅能寫出 if, alert等簡(jiǎn)單的驗(yàn)證代碼,或者想多了解一下Js, 那么此文可能對(duì)你有幫助。
好了,開(kāi)始吧。
現(xiàn)在我突然想起了 Thinking in java?中的 "一切皆是對(duì)像", 其實(shí)我覺(jué)得這句話 有點(diǎn)不適合 java 反倒是更適合 js
1.怎樣構(gòu)造(初始化)對(duì)象?
js 代碼

var?Prototype?=?
{????
??Version:?'1.5.0_rc1',????
??ScriptFragment:?'(?:)((\n|\r|.)*?)(?:<\/script>)',????
???

??emptyFunction:?function()?
{},????

??K:?function(x)?
{return?x}????
}????就這樣,初始化了一個(gè)對(duì)象(名字就叫 Prototype),以及對(duì)象的四個(gè)成員: Version, ScriptFragment, emptyFunction, K
我們也來(lái)試試:
js 代碼

var?bbs?=?
{????
?name:?'JavaEye',????
?version:?'2.0',????
?describe:?"做最棒的軟件開(kāi)發(fā)交流區(qū)",????

?sayHello:?function()?
{?alert("hello,?i'm?javaeye!?")?}????
}???于是你可以這樣使用: bbs.name 或 bbs.sayHello()
看到嗎? sayHello 是一個(gè)方法哦,不要驚慌,"一切都是對(duì)象",所以它和 name 是一樣的,只不過(guò)初始化,或定義的語(yǔ)法不一樣。想起 js 中的正則表達(dá)式中的那兩個(gè)桿桿了嗎? 可愛(ài)吧!
方法是對(duì)象,所以它可以被當(dāng)作參數(shù)傳遞,或者作為方法的返回值。
所以 Prototype 中有一個(gè) Version 屬性,還有一個(gè)匹配 script 的正則式字符串, 一個(gè)空方法emptyFunction,還有一個(gè)方法 K, 它僅僅返回參數(shù)。
沒(méi)問(wèn)題吧,繼續(xù)!
2. 構(gòu)造函數(shù)?
先讓我們寫段代碼吧(中學(xué)時(shí),我語(yǔ)文極差(大學(xué)沒(méi)語(yǔ)文了),我想寫代碼讓你們明白我心里真實(shí)的想法):
先看結(jié)果:
從 alert(bencode.name); 可以知道,bencode是對(duì)象, 而 name 就是 bencode 的屬性, 它被正確地初始化為 "bencode"
所以 var bencode = new Persion("bencode"); 就是構(gòu)造了一個(gè)新的對(duì)象,Person() 相當(dāng)于構(gòu)造函數(shù)
所以 new 這個(gè)關(guān)鍵字, 就是構(gòu)造一個(gè)新的對(duì)象,并且在這個(gè)對(duì)象上調(diào)用相應(yīng)的方法,并將這個(gè)對(duì)象返回。
按上面說(shuō): 方法 如果用在 在 new 后面,就相當(dāng)于成了構(gòu)造函數(shù)了。
話又說(shuō)回來(lái)了, 如果 var bencode = new Persion("bencode") 是 構(gòu)造了一個(gè)對(duì)象,像Java, 那么 Person 是不是類呢?
可是 Person 不是方法嗎? 可是方法不也是對(duì)象嗎? 類也是對(duì)象?
一切皆對(duì)象?
本來(lái)無(wú)一物!
好了,看 prototype.js吧
如果我們要繼承一個(gè)類,只要: