匿名函数调用返回对象之前的“新”

时间:2013-05-18 19:37:26

标签: javascript

我正在阅读KnockoutJS源代码。

我遇到了以下一行,我不确定我理解......

ko.utils = new (function () {

一般来说,结构似乎与以下几行有关:

ko.utils = new (function () {

   // some variables declared with var

   return {
        export:value,
        export:value
   };

})();

我不明白这个结构,为什么需要new?它有什么作用?有什么用?

(我认为如果函数在其名称之前使用new调用它作为构造函数调用,并且如果它返回一个对象,则它与没有new的invokation相同。)

更新:我在github上问KnockoutJS团队,这就是我的回复:

  

我的猜测是史蒂夫只是不知道不需要它。回顾他最初的提交,我看到很多不必要的消息已被删除。

1 个答案:

答案 0 :(得分:10)

可能是一些阻止this到达全局上下文的模式(在这种情况下不是,因为每个变量都声明为var,但作者可能想将它用作一般模式创建对象)。

var x = new (function () {
   this.foo = "bar";
   return {
        // whatever
   };
})();

console.log(foo); // Uncaught ReferenceError: foo is not defined 

var x = (function () { // without new
   this.foo = "bar";
   return {
        // whatever
   };
})();

console.log(foo); // "bar"