10

我正在阅读 KnockoutJS 源代码。

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

ko.utils = new (function () {

一般来说,结构似乎是这样的:

ko.utils = new (function () {

   // some variables declared with var

   return {
        export:value,
        export:value
   };

})();

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

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

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

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

4

1 回答 1

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"
于 2013-05-18T19:49:16.943 回答