違いは何ですか:
pause: function () {
this.state.gamePaused = true;
},
と
function pause() {
this.state.gamePaused = true;
}
違いは何ですか:
pause: function () {
this.state.gamePaused = true;
},
と
function pause() {
this.state.gamePaused = true;
}
最初の例はおそらくオブジェクトの一部です。つまり、pauseはJavascriptオブジェクトの関数であり、2番目の例はスタンドアロン関数として一時停止します。
私は次のようなもので最初の例を見ることを期待しています:
var someObject = {
pause: function () {
this.state.gamePaused = true;
},
anotherProperty : "some value"
}
したがって、次のように使用されます。
someObject.pause();
一方、2番目の例は次のように使用されます。
pause();
どちらも関数(別名メソッド)であり、2つの異なる設定で使用するために2つの異なる方法で宣言されているだけです。
JSでは、次のようにオブジェクトを定義できます。
var obj = {
flagVariable: false,
intVariable: 115,
stringVariable: 'hello world',
functionVariable: function() { alert("Hello world!"); }
}
この例では、オブジェクトの最後のプロパティは関数です。これは無名関数です。つまり、それ自体は名前が付けられていません。そのため、「関数」と「()」の間に名前はありません。したがって、次のように、割り当てた変数を使用して参照します。
foo.functionVariable();
また、それを渡して、割り当てた変数の名前で実行することもできます。
var callback = foo.functionVariable;
callback();
関数はほぼどこでも宣言できるので、グローバルスコープでは次のように言うことができます。
function pause () { alert("Hello world!"); }
これは名前付き関数を定義し、名前でどこからでも実行できます。
pause();
ちなみに、これも渡すことができます:
var callback = pause;
callback();
ECMAScriptは、メソッドをプロパティの値である関数として定義します。したがって、オブジェクトに関数を配置するとき、それをそのオブジェクトのメソッドと呼びます。
それで、質問に答えるために、最初のものは方法です。
プロパティの値である関数。
注関数がオブジェクトのメソッドとして呼び出されると、オブジェクトはその
this
値として関数に渡されます。
オブジェクトにアタッチされた、これはまだ関数ですが、メソッドと呼ばれます。オブジェクトにアタッチされ、そのthis
パラメータはそのオブジェクトを参照します。そのように呼んでください:obj.pause()
グローバル名前空間で定義されているこの関数は、どこからでも呼び出すことができ、window
オブジェクトにアタッチされます。関数内this
のオブジェクトを参照します。window
単にそのように呼んでください:pause()
後者が1つと呼ばれることはめったにありませんが、両方の関数は実際にはメソッドであることに注意してください。