2012-04-22 53 views
4

相對JS新手試圖瞭解定義JS對象的兩種方法之間的區別...瞭解JS對象VS沒有定義爲功能這裏

在某些情況下,我已經看到了我所說的例子「命名空間」對象或「處理」,可能是這個樣子:

var example = { 
    message: null, 
    setup: function(message) { 
    example.message = message; 
    alert(message); 
    } 
} 

我可能會使用這樣的事情將一些相關的功能。如果我打電話給example('foo!'),我希望會有一個提示消息foo!出現,如果我打電話給example.message,我預計它會返回foo!

我的第一個問題是:什麼是這種類型的對象(沒有定義爲函數)調用?

我在網站上使用對象像這樣的很多,因爲處理程序設置一組綁定的Ajax交互等。我一直在試圖瞭解面向對象的JavaScript,並且一直在做一些閱讀(12)。在Mozilla文檔它的建議的對象應該定義爲功能,所以更喜歡這樣的:

var example = function(message) { 
    .... 
} 

我的第二個問題是:這是什麼樣的對象(定義爲一個功能)的叫什麼?

我真的不明白這兩個,所以我有一些問題,這引起了問題3的區別:

如果你定義一個對象的功能,你如何定義屬性在對象上,如果你不一定希望它們在實例化時執行?

即,如果我這樣做:

var example = function(message) { 
    alert('message'); 
} 

後來我知道,example('foo!')會觸發警報與foo!。但是,如何在對象上定義其他屬性或方法以便稍後訪問和/或調用?

回答

6

我的第一個問題是:什麼是這種對象(未定義爲 函數)調用?

這就是知道的object literal notation

我的第二個問題是:這是什麼樣的對象(定義爲 功能)的叫什麼?

也就是說知道作爲function expression

更多閱讀:

如果你定義一個對象的功能,如果你不上 你如何定義屬性的對象當它被 實例化時,它們是否一定希望它們執行?

您可以使用this關鍵字添加屬性或使用prototype屬性是這樣的:

var example = function(message) { 
    alert('message'); 
    this.hello = function(){ 
     alert('hello'); 
    } 
} 

或者

var example = function(message) { 
    alert('message'); 
} 

example.prototype.hello = function(){ 
    alert('hello'); 
} 

var e = new example('hello'); 
e.hello(); 

使用this,你需要使用new關鍵字來實例化對象。


對OOP有興趣閱讀:

+0

這是非常有用的,謝謝!一個小的子問題,在對象字面量和函數表達式之間是否存在主要的*陷阱*或棘手的區別? IE瀏覽器。因爲我習慣於使用obj。文字是否有什麼我應該特別警惕的,如果我嘗試使用函數表達式? – Andrew 2012-04-22 19:57:40

+0

也許值得注意的是,如果你從'e = new example'中省略'new',''''''''''''''''''''''這個''是指全局對象('window')。 – Lekensteyn 2012-04-22 19:57:48