1

Javascript: The Definitive Guideを読んでいるときに、自分の関数のプロパティを定義するセクションに興味をそそられました。例を挙げましょう:

function foo( ) { 

    foo.bar++;

    return foo.bar;
};

foo.bar = 0;

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

したがって、上記は、これらのプロパティを使用して、関数への複数の呼び出し間でデータを保持する方法を示しています。

上記の例ではプロパティが本質的に公開されていることを理解していますが、これを使用すべきではない理由や、クロージャを使用してプロパティを非公開にするという明らかな例以外に、データを永続化する他の方法が好まれる理由はありますか?

4

2 に答える 2

1

古典的な OO 言語の用語では、これらは本質的にpublic static (単に public ではない) またはインスタンス変数ではなくクラス変数です。そのようなプロパティ (特定のインスタンスではなく、関数自体に属するもの) のユース ケースがある場合、それらを使用しない理由はありません。

于 2012-10-25T10:56:02.833 に答える
1

関数呼び出し間で永続的な状態がある場合、それは OOP です。OOP の場合は、プロトタイプとそのインスタンスを使用します。インスタンスは状態を保持します。状態をリセットする必要がある場合は、新しいインスタンスを作成するだけです。面倒な細かな管理は必要ありません。

ただし、関数オブジェクトにデータを保存することは、重い計算の 1 回限りのキャッシュに適している場合があります。関数を考えてみましょう:

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 に答える