↓の関数定義(?)の違いは何でしょうか?
aaa = (hikisu) ->
bbb: (hikisu) ->
=
と :
の違いは何でしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
実際にCoffeeScript公式ページのTry CoffeeScriptでコンパイルしてみると、以下のようなJavaScriptが生成されます。
javascript
1var aaa; 2 3aaa = function(hikisu) { 4 return alert(hikisu); 5}; 6 7({ 8 bbb: function(hikisu) { 9 return alert(hikisu); 10 } 11});
bbb関数は生成されるのですが、
「無名の即時関数内でbbbというキーに対して無名の関数を定義している」
という状態になるかと思います。
なので、axax90さんのコードを参考に、以下のようにコードを書き換えたとしても、
「bbb is not defined」
と怒られます。
CoffeeScript
1aaa = (hikisu) -> alert(hikisu) 2 3bbb: (hikisu) -> alert(hikisu) 4 5bbb('hoge'); // bbbを呼びだそうとしたけど怒られる。
「じゃあ:
による関数定義って、どうやって使えばいいんだ?」
となると思いますが、自分が思いつくのは以下のような感じでしょうか。
CoffeeScript
1/* 2Dogクラス 3constructor(str): 犬の名前を指定する 4bark(str): 吠える(指定した文字列をポップアップで表示し、コンソールログに名前とポップアップの内容を表示する 5*/ 6class Dog 7 constructor: (@name) -> 8 bark: (voice) -> 9 alert(voice) 10 console.log(@name + ' barked ' + voice) 11 12// shibaという変数にDogオブジェクトを作成 13shiba = new Dog('pochi') 14 15// shibaのbark関数を実行 16shiba.bark('bow') // ポップアップで「bow」と表示され、コンソールログに「pochi barked bow」と記録される。
余談。
EcmaScript2015(最新版のJavaScriptと言えばよろしいでしょうか)で書くと、こんな感じになると思います。(動作確認はBabelで行いました)
JavaScript
1class Dog{ 2 constructor(n){ 3 let name = n 4 } 5 bark(voice){ 6 alert(voice) 7 } 8}; 9 10var shiba = new Dog('pochi') 11shiba.bark('bow')
以上です。
冗長な説明になりましたが、参考になると幸いです。
投稿2016/07/12 06:13
総合スコア2244
0
JavaScript にコンパイルすればわかります。
$ coffee -cbp sample.coffee
javascript
1// Generated by CoffeeScript 1.10.0 2var aaa; 3 4aaa = function(hikisu) {}; 5 6({ 7 bbb: function(hikisu) {} 8});
結果を見てもわからないのであれば、まずは JavaScript の勉強をすることをオススメします。
CoffeeScript は JavaScript がわかっているのが大前提です。
投稿2016/07/12 05:33
総合スコア1864
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。