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

时间:2011-06-27 13:41:14

标签: javascript

我已经看到了使用闭包创建js对象的这两种方法,但不确定使用一种方法是否有任何优势:

1。)使用新的

var myObject = new function() {

    // ...

    this.foo = 'bar';
};

2。)使用自动执行的匿名

var myObject = (function() {

    // ...

    return {
        foo: 'bar'
    };
} ());

我已经阅读了一些有关方法1需要分配this的一些开销,但我不确定是否将该声明与方法2进行比较,或者与非返回进行比较自动执行匿名函数。

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

2 个答案:

答案 0 :(得分:1)

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

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; }
};

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

答案 1 :(得分:1)

我最后做了一些进一步的搜索,并在比较几种实例化方法的过程中遇到了这个问题:

http://jsperf.com/new-vs-literal/4

似乎使用new function() {};模式显着更慢