2011-01-28 69 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()时才会创建实例。

相关问题