1

'sample' という名前のプロパティを 1 に設定:

方法 1:

function Collection() {
    this.sample = function() {
        return 1;
    }
}

方法 2:

function Collection() {
    this.sample = function() {
        this.sample = 1;
    }
}

違いはありますか?

4

3 に答える 3

2

obj.sample()2 番目のケースでは、 1 回しか呼び出すことができません。その後、番号 1 に電話をかけようとします。

var obj = new Collection();
var one = obj.sample();
var again = obj.sample();

最初のケースでは、oneとの両方againが 1 になります。2 番目のケースでは、3 行目で例外が発生します ("Uncaught TypeError: number is not a function")。

于 2013-06-25T20:44:12.480 に答える
1

大きな違い: 最初の割り当ては this.sample を 1 を返す関数に設定することになり、2 番目の割り当ては this.sample を this.sample = 1 を設定する関数に設定することになります (anonymous への参照を失います)コンストラクターに組み込まれた関数)、未定義を返します。

したがって、「方法 1」の場合:

var c = new Collection();
console.log(c.sample());  // logs "1"
console.log(c.sample());  // logs "1" again

そして「方法2」:

var c = new Collection();
console.log(c.sample());  // logs nothing (undefined doesn't print anything, iirc)
console.log(c.sample());  // throws an error, since "1" is not a function
于 2013-06-25T20:47:28.987 に答える
0

あなたはさまざまなことをしています:

最初の例では、数値 '1' を返す FUNCTION があります。

2 番目の例では、オブジェクトの MEMBER 'sample' を '1' に設定しています。

また、object.sample (例 #2) を初めて呼び出すと、メンバーを設定する関数を呼び出しているため、'1' ではなく nil が返されます。

最初の呼び出しの後、'sample' にアクセスすると、番号 '1' が返されます。

于 2013-06-25T20:47:01.023 に答える