var someObj = {}之间的区别;和var someObj =新的RealObj

时间:2011-01-28 14:56:21

标签: javascript

所以这更像是一个问题,因为“不知道正确的词,所以我不能谷歌了”(我认为)。

我一直在想用javascript。可以创建两个“类型”的对象。

一个是:(或通过使用原型)

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

var foo = new Foo();

另一个是:

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

我能想到的唯一不同之处在于前者使用原型并且可以从其他对象“扩展”并且还允许多个实例,其中后者只能有一个实例且无法扩展(以同样的方式)(如果我错了,请纠正我)

但是,在这种情况下,名为var foo的变量在两种情况下都具有完全相同的属性。

因此,对于一个具体的问题:在后一版本中创建的对象类型的名称是什么(如何在google上搜索更多关于它的信息)以及创建对象的两种方式之间存在哪些差异? ?

2 个答案:

答案 0 :(得分: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"

这可以对继承有用,或者如果你想要缓存实例并为传递给函数的相同参数返回相同的实例。

答案 1 :(得分:2)

使用以下方法定义对象时:

var foo = {};

这是文字的。该对象是对象的即时实例。定义像:

这样的对象时
function Foo(){
    this.bar = function(){};
}

在您执行新的Foo()之前,没有创建任何实例。