2012-10-25 81 views
1

雖然讀了Javascript: The Definitive Guide我很喜歡定義你自己的函數屬性。讓我舉一個例子:定義函數的屬性

function foo() { 

    foo.bar++; 

    return foo.bar; 
}; 

foo.bar = 0; 

foo(); // returns 1 
foo(); // returns 2 

所以上面說明了如何使用這些屬性來保持多個調用函數之間的數據。

我明白,在上面的例子中,屬性本質上是公共的,但是有什麼理由不應該使用它,或者爲什麼其他的持久化數據方法更好,除了使用閉包使屬性保密的明顯例子之外。

回答

1

當跨函數調用存在持久狀態時 - 它是OOP。如果是OOP,那麼使用原型和它們的實例。實例擁有該狀態。當你需要重置狀態時 - 只需創建一個新的實例。沒有乏味的微觀管理。

但是,在函數對象上存儲東西可能對一次性緩存某些繁重的計算很有用。考慮一個功能:

calcCorpuscularVelocity.COEF = Math.sqrt(Math.pow(Math.sin(Math.PI), Math.E)); 
function calcCorpuscularVelocity (x) { 
    return x * calcCorpuscularVelocity.COEF; 
} 
1

在經典的OO語言中,這些基本上都是public static(不只是public)或類變量而不是實例變量。沒有理由不使用它們,如果你有這樣一個屬性的用例(一個不屬於特定實例,但屬於該功能本身)

相關問題