在阅读Javascript: The Definitive Guide时,我对定义您自己的功能属性一节感兴趣。让我举个例子:
function foo( ) {
foo.bar++;
return foo.bar;
};
foo.bar = 0;
foo( ); // returns 1
foo( ); // returns 2
因此,上面演示了如何使用这些属性在多个函数调用之间保持数据。
我知道在上面的示例中属性基本上是公开的,但是有任何理由不应该使用它或为什么除了使用闭包使属性变为私有的明显示例之外,为什么其他持久化数据方法是首选的。
答案 0 :(得分:1)
在经典的OO语言术语中,这些基本上是公共静态(不仅仅是公共)或类变量而不是实例变量。如果您拥有此类属性的用例(不属于特定实例但属于函数本身的用例),则没有理由不使用它们。
答案 1 :(得分:1)
当函数调用之间存在持久状态时 - 它是OOP。如果它是OOP,那么使用原型及其实例。实例持有国家。当您需要重置状态时 - 只需创建一个新实例。没有繁琐的微观管理。
但是,在函数对象上存储东西可能适用于一些重度计算的一次性缓存。考虑一个函数:
calcCorpuscularVelocity.COEF = Math.sqrt(Math.pow(Math.sin(Math.PI), Math.E));
function calcCorpuscularVelocity (x) {
return x * calcCorpuscularVelocity.COEF;
}