'sample' という名前のプロパティを 1 に設定:
方法 1:
function Collection() {
this.sample = function() {
return 1;
}
}
方法 2:
function Collection() {
this.sample = function() {
this.sample = 1;
}
}
違いはありますか?
'sample' という名前のプロパティを 1 に設定:
方法 1:
function Collection() {
this.sample = function() {
return 1;
}
}
方法 2:
function Collection() {
this.sample = function() {
this.sample = 1;
}
}
違いはありますか?
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")。
大きな違い: 最初の割り当ては 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
あなたはさまざまなことをしています:
最初の例では、数値 '1' を返す FUNCTION があります。
2 番目の例では、オブジェクトの MEMBER 'sample' を '1' に設定しています。
また、object.sample (例 #2) を初めて呼び出すと、メンバーを設定する関数を呼び出しているため、'1' ではなく nil が返されます。
最初の呼び出しの後、'sample' にアクセスすると、番号 '1' が返されます。