【问题标题】:Javascript new object (function ) vs inline invocationJavascript 新对象(函数)与内联调用
【发布时间】:2011-02-04 14:39:49
【问题描述】:

是否有任何考虑来确定创建具有私有成员的对象的更好做法?

var object = new function () { 
   var private = "private variable";
   return {
       method : function () { 
           ..dosomething with private;
       }
   }
}

VS

var object = function () {
 ...
}();

基本上在这里使用 NEW 和在我们定义后立即调用函数有什么区别?

【问题讨论】:

标签: javascript function private members


【解决方案1】:

如果您将函数用作事件处理程序,则可能会导致内存泄漏。看看一些articles

【讨论】:

    【解决方案2】:

    new 运算符使函数像Constructor Function 一样被调用。

    我以前见过这种模式,但我没有看到使用它的任何好处。

    new 操作符的目的是创建一个对象(构造函数内部的this 值),设置正确的[[Prototype]] 内部属性,构建原型链并实现继承(具体可以看[[Construct]]操作)。

    我建议您使用 内联调用 模式。

    【讨论】:

    • 虽然我同意 CMS,因为您使用的是显示模块模式并依赖于词法范围 - 我要澄清 new 在创建基于原型模式的类​​对象时是合适的 - 对于例如 BackboneJS 模型或视图。
    【解决方案3】:

    link 提供的统计数据也证实内联调用模式更好。

    请注意,度量单位是operations per second,越高越好

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多