JavaScript: 自执行类和公共函数

3

我有很多以下类:

(function() {
   if (!window.Administration) {
     window.Administration = {};
   }
   window.Administration.Customers = (function() {
      // some code and private methods
      return {
      // public methods
      };
   })();
})();

我听说过这样的公共方法声明不太好,因为js引擎会根据你从代码中调用它们的次数创建许多公共方法实例...这是真的吗?

在这种情况下,我该如何重构我的代码以解决这些内存泄漏问题,但又保留自执行功能?

谢谢


把函数定义简单地重构成一个独立的表达式怎么样? - raina77ow
这取决于您代码的目标; 如果信息隐藏很重要,那么您需要这个...否则,只需通过原型添加方法并节省一些内存。 - Ja͢ck
问题是这些泄漏有多大。 - nKognito
1个回答

0
如果你只是担心隐藏方法,那么你可以使用这个结构:
(function(ns) {

    // default constructor
    ns.Blah = function(v) {
        this.v = v;
        setup.call(this); // invoke private method
    }

    // private method, invoked using .call(this)
    function setup()
    {
        this.w = this.v + 123;
    }

    function myhello()
    {
        return 'w = ' + this.w + ' and v = ' + this.v;
    }

    ns.Blah.prototype = {
        hello: function() {
            return myhello.call(this);
        }
    };

}(window.MYNS = window.MYNS || {});

这不是关于隐藏方法的问题...我想节省内存并删除这样的泄漏,如果它们确实存在。 - nKognito
@nKognito 嗯,这样可以节省内存;我有什么遗漏吗? - Ja͢ck
@nkognito 这是一个要求吗? :) 自执行文件可以隐藏实现,但这只是一种方式。 - Ja͢ck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接