2011-01-28 32 views
1

所以這更多的是一個問題,因爲「不知道正確的詞,因此我不能谷歌它」(我認爲)。var someObj = {}之間的差異;和var someObj = new RealObj

我一直在想javascript的。可以創建兩個「類型」的對象。

其中之一是:(或通過使用原型)

function Foo(){ 
    this.bar = function(){}; 
} 

var foo = new Foo(); 

另一個是:

var foo = { 
    bar : function(){} 
}; 

唯一的一些差別,我能想出是一個事實,即前者使用原型,可以從其他對象「擴展」,並允許多個實例,其中後者只能有一個實例並且不能被擴展(以相同的方式)(糾正我,如果我錯了)

但是,在這種情況下,名稱爲var foo的變量在兩種情況下都具有完全相同的屬性。

因此,對於一個具體的問題:在後一版本中創建的對象類型的名稱是什麼(我怎樣才能在Google上搜索更多信息),以及創建目的?

回答

3

您所描述的差異是正確的。

後者被稱爲對象字面符號,如果您只是想創建一個對象,它更簡潔。但他們是而不是兩種不同類型的對象。對象文字符號更像是創建對象的快捷方式(但首選)。您可能想要閱讀MDC - Working with objects

的文字符號實際上是在做同樣的:

var foo = new Object(); 
foo.bar = function() {}; 

但前面已經說了,這是更簡潔,更易於閱讀。

更新:

也許有進一步的差異值得一提:調用new Foo()並不一定意味着你會得到一個「Foo對象」回來。構造函數可以返回任何對象。例如。這是有效的:

function Foo() { 
    return new Bar(); 
} 

var foo = new Foo(); // foo contains a "Bar object" 

如果你想例如這可以繼承成材或緩存實例併爲傳遞給函數的相同參數返回相同的實例。

+2

+1。爲了OP的興趣,請查看以下鏈接:https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Literals它涵蓋了所有文字,包括對象。 – Stephen 2011-01-28 15:01:05

2

當你定義使用對象:

var foo = {}; 

這是文字。該對象是對象的即時實例。當你定義一個對象時,如:

function Foo(){ 
    this.bar = function(){}; 
} 

直到你做新的Foo()時纔會創建實例。

相關問題