1

在阅读Javascript:权威指南时,我对定义您自己的函数属性部分很感兴趣。让我给你举个例子:

function foo( ) { 

    foo.bar++;

    return foo.bar;
};

foo.bar = 0;

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

因此,上面演示了如何使用这些属性在对函数的多次调用之间持久化数据。

我知道在上面的示例中属性本质上是公共的,但是除了使用闭包将属性设为私有的明显示例之外,还有什么理由不应该使用它,或者为什么首选其他持久化数据的方法。

4

2 回答 2

1

在经典的 OO 语言术语中,这些本质上是公共静态(不仅仅是公共)或类变量而不是实例变量。如果您有此类属性的用例(不属于特定实例但属于函数本身的属性),则没有理由不使用它们

于 2012-10-25T10:56:02.833 回答
1

当函数调用之间存在持久状态时——这就是 OOP。如果是 OOP,则使用原型及其实例。实例持有状态。当您需要重置状态时——只需创建一个新实例。没有繁琐的微观管理。

但是,将内容存储在函数对象上可能有利于一次性缓存一些繁重的计算。考虑一个函数:

calcCorpuscularVelocity.COEF = Math.sqrt(Math.pow(Math.sin(Math.PI), Math.E));
function calcCorpuscularVelocity (x) {
    return x * calcCorpuscularVelocity.COEF;
}
于 2012-10-25T12:48:14.523 回答