2013-05-18 32 views
10

我正在阅读KnockoutJS源代码。“新”之前匿名函数调用返回对象

我跑进以下行,我不知道我理解......

ko.utils = new (function() { 

一般来说,结构似乎是沿着线:

ko.utils = new (function() { 

    // some variables declared with var 

    return { 
     export:value, 
     export:value 
    }; 

})(); 

我不不懂这个构造,为什么需要new?它有什么作用?它对于什么有用?

(我认为,如果一个函数调用new它的名字之前被调用的构造函数,如果它返回一个对象是相同的invokation不new

更新:我问Github上的KnockoutJS团队,这是我回来的:

我的猜测是,史蒂夫只是不知道这是不需要的。回顾他最初的承诺,我看到很多不必要的新闻已被删除。

+1

据我所知道的,'new'在此这种情况下 –

+0

没有影响:那么,是否可以认为,使用了“新”的关键字作为一个JavaScript函数表达的“静态”( http://stackoverflow.com/questions/10406552/is-it-right-to-think-of-a-javascript-function-expression-that-uses-the-new-key) – Bergi

+0

碰巧遇到两个他们...... – Bergi

回答

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" 
+0

+1这非常聪明:)(你找出推理)。这种事''使用严格';'避免。这完全令人满意,谢谢。 –