Javascript 闭包对象创建:这两种方法的优点/缺点是什么?

Javascript 闭包对象创建:这两种方法的优点/缺点是什么?,javascript,Javascript,我见过这两种使用闭包创建js对象的方法,但不确定使用一种方法是否比使用另一种方法有任何优势: 1.)使用新的 var myObject = new function() { // ... this.foo = 'bar'; }; 2.)使用自动执行匿名 var myObject = (function() { // ... return { foo: 'bar' }; } ()); 我读过一些关于方法1需要分配此的开销的文章,但

我见过这两种使用闭包创建js对象的方法,但不确定使用一种方法是否比使用另一种方法有任何优势:

1.)使用新的

var myObject = new function() {

    // ...

    this.foo = 'bar';
};
2.)使用自动执行匿名

var myObject = (function() {

    // ...

    return {
        foo: 'bar'
    };
} ());
我读过一些关于方法1需要分配
的开销的文章,但我不确定该声明是与方法2之类的东西比较,还是与不返回的自动执行匿名函数比较


就个人而言,我认为第一种语法看起来更易于维护,但这可能只是个人偏好。

第一种语句提供了一个完整的对象实例——尽管这是唯一可能的实例,因为构造函数可以使用一次——第二种语句提供了一个对象文本。在这种情况下,我看不出有什么区别,两者都可以称为“一次性实例模式”。第一种模式(对我来说)的唯一优势是我的编辑器(KomodoEdit 6.1)可以使用intellisense(它识别myObject并“知道”它的属性)。 第一种模式的另一个优点可能是可以为其定义原型方法(如果您命名匿名函数):


但这可能不适用于所有浏览器。

我最后做了一些进一步的搜索,并在比较几种实例化方法的过程中发现了这一点:


似乎在使用
new函数(){}模式明显较慢

+1了解intellisense支持很好,我注意到在使用第二种模式时VS2010似乎不能很好地识别属性。
var myObject = new function myObj() {
    this.foo = 'bar';
    myObj.prototype.getFoo = function() { return this.foo; }
    myObj.prototype.setFoo = function(v){ this.foo = v || this.foo; return this; }
};