質問: javascriptでメソッドを定義するとき、私はいつも以下のurlにあるような形式で記述しております。 https://codezine.jp/article/detail/221 ``` function myFunc(arg) { alert(arg); } myFunc("hoge"); // hoge と表示される。 ``` しかし、最近、以下のような記述の仕方で、メソッドを定義しているソースを見かけます。 こちらの方が綺麗だなと思ったのですが、こういう記述っていつごろからこうなったのでしょうか? ``` xxxx: function(){ xxxxxx; }; ``` こういう記述の仕方について言及されているwebページを探していたのですが、見当たらず質問させて頂きました。 バージョンやフレームワークによって使えない場合があるのかどうかを調べたく、 そのために、こういう記法の検索キーワードを抑えないとと思いした。 「javascript メソッド」とかでは、前者の記述の仕方の記事ばかりで困っております。 宜しくお願いします。
回答: ちょっと補足的に... ### メソッドは「オブジェクトに関連付けられた関数」です。 例題として提示されているコード ``` function myFunc(arg) { alert(arg); } myFunc("hoge"); // hoge と表示される。 ``` 1つ目のこれは「関数」であり、メソッドではありません。 そして、二つ目 ``` xxxx: function(){ xxxxxx; }; ``` は、本来 ``` var foo = { bar: function(){ xxxxxx; }, baz: function(parm){ //別の処理 } }; foo.bar(); foo.baz(parm); ``` となっているはずではないでしょうか? このfooというオブジェクトの中で、プロパティとして宣言されている関数bar,bazが「メソッド」です。 (※オブジェクトリテラルのプロパティとして関連付けられた関数) **メソッドの定義** 記述法、使い分けというよりは 関数型でコードを記述すると前者、 オブジェクト指向でコードを記述すると後者になる といった感じです。 どちらの記述にもメリット、デメリットがあり、そのプロジェクトの規模や環境によって どちらが適しているかも変わってきます。 「関数型プログラミング オブジェクト指向プログラミング」で検索してみると、もう少し詳しく分かるかもしれません(ただ、他の言語のものが多々見つかるかもですが) > > バージョンやフレームワークによって使えない場合があるのかどうか > > > 特にありません。 ただ、オブジェクト指向でのコーディングは慣れるまで、ちょっと難しいと感じるかも...というのが個人的な感覚です。 **追記** 自分で書いておきながら、逆に混乱を招く回答だったかも...と思い、ところどころ変えました。。 「関数」と「オブジェクト」という言葉も混乱を招きやすいので、 ちょっと簡単に注釈を加えておきます。 unauさんがおっしゃっている通り「JavaScript の関数は、関数オブジェクトです」これは正しいことで JavaScriptのデータは数値、文字列、論理値、null、undefined(+ES6からのSymbol)以外すべて オブジェクトなのですが、その中で * 「オブジェクト」は値を収める名前付きコンテナ * 「関数」はアプリケーションを実行可能にする手続き * メソッドは「オブジェクトに関連付けられた関数」 として考えるのが妥当かと思います。