我已经看到了使用闭包创建js对象的这两种方法,但不确定使用一种方法是否有任何优势:
1。)使用新的
var myObject = new function() {
// ...
this.foo = 'bar';
};
2。)使用自动执行的匿名
var myObject = (function() {
// ...
return {
foo: 'bar'
};
} ());
我已经阅读了一些有关方法1需要分配this
的一些开销,但我不确定是否将该声明与方法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() {};
模式显着更慢