-1

次の関数宣言があります。

function Linker(linked_class, word_class, colors_count) {
    var _linked_class = linked_class;

    this.say = function() {
        alert(_linked_class);
    }
}

_linked_class関数内でプライベート変数として使いたい。私の質問は_linked_class、関数内で変数を作成し、引数リストを介して渡された変数の値を割り当てる必要があるかどうかlinked_class、または引数を介して渡された変数を宣言なしでプライベート変数として使用できるかどうかです。次のように:

function Linker(_linked_class, word_class, colors_count) {
    this.say = function() {
        alert(_linked_class);
    }
}
4

2 に答える 2

0

はい、両方の方法で行うことができます。javascript は、関数が作成された時点で関数のコンテキストを保持するためです。したがって、2番目の例では、「say」が呼び出されるたびに _linked_class が有効な値になります。

于 2013-07-20T10:32:55.987 に答える
0

JavaScript で「プライバシーを守る」には、2 つの一般的な方法があります。1 つはクロージャーによるものです。コンストラクターの引数はコンストラクター クロージャーに属します。その場合、それらの変数と関数は、関数の外部からアクセスできなくなります。

もう1つは、それらを通常の変数/メソッドとして扱うことです。最初のアンダースコアは言語メカニズムではなく、プログラマーがプライバシーを示すために使用する規則です。例えば:

function Linker(linked_class, word_class, colors_count) {
    this.say = function() {
        alert(linked_class);
        // if you want to access a "conventionally private", 
        // (or any other method from the same class), 
        // you can do it like this:
        this._whisper();
    }
    this._whisper = function() {
        alert(linked_class);
    }
    this._pseudoPrivateVariable = 5;
}

アンダースコアは、クロージャーでは一般的ではありません。

于 2013-07-20T10:41:37.383 に答える