2013-08-29 55 views
0

我想確定什麼是最好的做法,以聲明由JavaScript「類」使用的助手函數。例如:什麼是正確的方法來聲明javascript原型函數調用幫助函數

方法#1:

// closure issues? 
function helper(param) { 
    return compute(param); 
} 

function HeavilyInstantiated() {} 

HeavilyInstantiated.prototype.computeHard = function(params) { 
    var someResult = helper(params.prop1); 
    return someResult; 
} 

方法#2:

function HeavilyInstantiated() {} 

// still, only one instance for all objects instantiated? 
HeavilyInstantiated.prototype.helper = function(param) { 
    return compute(param); 
} 
HeavilyInstantiated.prototype.computeHard = function(params) { 
    var someResult = this.helper(params.prop1); 
    return someResult; 
} 
+0

你是什麼意思的「封閉問題」? – Bergi

+0

可能的重複[如何實現顯示原型模式?](http://stackoverflow.com/questions/9248655/how-to-implement-inheritance-in-js-revealing-prototype-pattern) – Bergi

+0

我的意思是說「關閉問題」是輔助函數可能被每個重要的實例關閉。也許情況並非如此 - 只是被推擠並從堆棧中彈出?可能只是「污染」全球名稱空間。 – alpinescrambler

回答

3

我更喜歡方法3,宣告它作爲構造函數的屬性:

function HeavilyInstantiated() {} 

HeavilyInstantiated.helper = function(param) { 
    return compute(param); 
} 
HeavilyInstantiated.prototype.computeHard = function(params) { 
    var someResult = HeavilyInstantiated.helper(params.prop1); 
    return someResult; 
} 

您仍然只有一個輔助方法實例,但它不會污染全局名稱空間或HeavilyInstant實例iated(它不在它們的原型鏈上)。

+0

對,這是我的目標,只有助手的一個實例,不會污染全局命名空間或當前範圍,並且看起來像你有獎金 - 也不會污染原型鏈。我會深入研究這一點。謝謝。 – alpinescrambler

相關問題