我們知道, JavaScript是一門OO的語言。
當然, 現在很少有不OO的語言了, 因此只說OO顯示不出我們的尊貴。
=。=
好吧, 那麼換個狠的:
JavaScript是一門超級OO的語言!!!
為什麼這樣說呢?
比如C#, 你寫了一個類, 上面掛一個method。
OK, 類可以執行個體化, 是一個Object。
但是那個方法呢?那個方法不是Object!
但是在JavaScript裡面, 這個則完全不同。 function不但是Object, 還是最尊貴的Object!
因此在上一篇裡面我說, “那樣寫是不好的”,
因為不但沒有體現JavaScript的尊貴, 更可恨的是, 他侮辱的是我們的一等對象:function!
好吧, 讓我們看下JavaScript的對象是如何使用的。
首先我們想一下, 普通的OO語言, 提筆先幹什嗎?
什麼, 提筆忘字?你太土了。
提筆首先應該定義class!
(當然也 有人說先namespace。 OK, 我不和你較真。 因為例如C#這種語言, namespace完全是個擺設。)
但是對於“高貴的JavaScript” (我不止一次這麼強調了), 根本是不需要class這種關鍵字的。
試問, class你本身是對象嗎?不是。 那麼我們不要你。
我們首先有請的應該是我們的一等對象:function!
例如這樣:
var Person = function(name,age){
this.Name = name;
this.Age = age;
}
然後我們在firebug裡面輸入:
var p = new Person('Arthas', 20);
然後在DOM裡面找p。 看看p是什麼樣子。
呃, 發現p 是一個Object, Name是Arthas, age是20對吧?
但是這就存在一個問題了:
我可以寫p, 你也可以寫js的時候用p來做變數名, 那麼我們必然會衝突, 對不?
那麼完美的解決方案是什嗎?namespace?
呃, JavaScript這麼高貴的語言怎麼會提供namespace這麼低級的東西。 那是C#之類的工廠化語言才給的。
那麼, 我們如何防止衝突?
這個。。。 還真是個難題。。。 留著下次再說吧。