非主流JavaScript教學(二)

來源:互聯網
上載者:User

我們知道, 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#之類的工廠化語言才給的。

那麼, 我們如何防止衝突?

這個。。。 還真是個難題。。。 留著下次再說吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.