2013-05-08 63 views
3

我有很多下列類:的Javascript:自執行的類和公共職能

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

聽說某處的公共方法此類聲明是不那麼好,因爲JS引擎創建的公衆儘可能多的情況下,你從代碼中調用它們的方法......這是真的嗎?

在這種情況下,我怎樣才能重構我的代碼,以解決這種內存泄漏,但離開自我執行功能?

謝謝

+0

如何簡單地重構函數定義成一個獨立的表達? – raina77ow 2013-05-08 13:20:05

+0

這實際上取決於你的代碼的目標;如果信息隱藏是重要的,那麼你需要這個...否則只需通過原型插入方法並保存一些內存。 – 2013-05-08 13:21:01

+0

問題是這樣的泄漏有多大是 – nKognito 2013-05-08 15:30:56

回答

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 || {}); 
+0

它不是關於隱藏方法......我想節省內存並消除這些泄漏,如果它們真的存在 – nKognito 2013-05-08 15:26:13

+0

@nKognito那麼,這將節省內存;我錯過了什麼嗎? – 2013-05-08 15:30:46

+0

但ns.Blah不可自行執行,對嗎? – nKognito 2013-05-08 16:42:50