回答編集履歴

4

日本語の文章を表現を微修正

2016/04/02 09:57

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  【たぶん、よくわかる解説2!!!】
42
42
 
43
- JavaScriptでは関数(メソッド)をオブジェクトとして扱うと、それを呼び出す(評価する)が厳密に区別されます。それは後ろに`()`を付けるかどうかです。では、CoffeeScriptはどうかというと、引数がある場合のみ`()`を省略しても良いとなっています。逆に引数無しで関数を呼び出す場合は必ず`()`が必要です。
43
+ JavaScriptでは関数(メソッド)をオブジェクトとして扱う場合と、それを呼び出す(評価する)場合が厳密に区別されます。それは後ろに`()`を付けるかどうかです。では、CoffeeScriptはどうかというと、引数がある場合のみ`()`を省略しても良いとなっています。逆に引数無しで関数を呼び出す場合は必ず`()`が必要です。
44
44
 
45
45
 
46
46
 

3

誤字脱字修正

2016/04/02 09:57

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  と、`->`の部分を`=>`に変えてみてください。期待通りに動くと思います。
14
14
 
15
- そして、`@alertName`を`@alertName()`にると実行されます。
15
+ そして、`@alertName`を`@alertName()`に変えるとうまく実行されます。
16
16
 
17
17
 
18
18
 

2

\(\)を付けた

2016/04/02 09:56

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -1,14 +1,18 @@
1
+ 修正点は2カ所です。
2
+
1
3
  ```CoffeeScript
2
4
 
3
5
  $('.name').on 'keyup', (e) =>
4
6
 
5
7
  if e.which == 13
6
8
 
7
- @alertName
9
+ @alertName()
8
10
 
9
11
  ```
10
12
 
11
13
  と、`->`の部分を`=>`に変えてみてください。期待通りに動くと思います。
14
+
15
+ そして、`@alertName`を`@alertName()`に返ると実行されます。
12
16
 
13
17
 
14
18
 
@@ -31,3 +35,17 @@
31
35
 
32
36
 
33
37
  蛇足: この便利な`=>`ですが、**ECMAScript 2015にパクられました。**__IE以外の__ブラウザあれば、素のJavaScriptでも使えるようになります。
38
+
39
+
40
+
41
+ 【たぶん、よくわかる解説2!!!】
42
+
43
+ JavaScriptでは関数(メソッド)をオブジェクトとして扱うと、それを呼び出す(評価する)が厳密に区別されます。それは後ろに`()`を付けるかどうかです。では、CoffeeScriptはどうかというと、引数がある場合のみ`()`を省略しても良いとなっています。逆に引数無しで関数を呼び出す場合は必ず`()`が必要です。
44
+
45
+
46
+
47
+ つまり、`@alertName`はただの関数オブジェクトです。それが実行されるわけではありません。しかし、`@alertName()`はその関数オブジェクトを引数無しで呼び出します。また、引数がある場合、たとえば、`@alertName 0`とした場合は、`@alertName(0)`として解釈されますので、同じく呼び出されます。
48
+
49
+
50
+
51
+ CoffeeScriptではこのように、関数を呼び出したい(評価したい)場合に、**引数無しの場合のみ**()の省略ができません。なお、`new TestClass`のようにnew式におけては、JavaScriptと同様に()を省略することは可能ですが、これは例外的なものです。

1

強調部分を変更

2016/04/02 09:54

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  【たぶん、よくわかる解説!!!】
16
16
 
17
- CoffeeScriptの`@`は`this.`です。ただ`this.`になるだけです。しかし、ここでの問題は**JavaScript**における`this`の扱いです。JavaScriptでの`this`は関数を呼び出したときのレシーバ(.の前の部分)になります。ですので、class内のメソッドでは通常`this`はインスタンス自身です。ですが、関数の中で作られる関数(`->`は関数を作ります)が実行されるときに、`this`がそのままインスタンス自身とは限りません。特に`on`のようなコールバックを引数にする場合、コールバックの関数が今のインスタンスから**呼び出されるとは限らない**ため、`this`がインスタンス自身を指す保証はありません。
17
+ CoffeeScriptの`@`は`this.`です。ただ`this.`になるだけです。しかし、ここでの問題は**JavaScript**における`this`の扱いです。JavaScriptでの`this`は関数を呼び出したときのレシーバ(.の前の部分)になります。ですので、class内のメソッドでは通常`this`はインスタンス自身です。ですが、関数の中で作られる関数(`->`は関数を作ります)が実行されるときに、`this`がそのままインスタンス自身とは限りません。特に`on`のようなコールバックを引数にする場合、コールバックの関数が**今のインスタンスから呼び出されるとは限らない**ため、`this`がインスタンス自身を指す保証はありません。
18
18
 
19
19
 
20
20
 
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- これはかなり面倒なものです。そこでCoffeeScriptは`=>`を開発しました。`=>`と`->`の違いは`this`を束縛するかどうかです。どういうことかというと`=>`で関数を作った場合、その関数がどこでどう呼び出されようが、`this`つまり`@`は関数を作った時のインスタンスになります。どうやってそうしているのかはJavaScriptに変換してみるとわかりますのでぜひ確認してください。
25
+ これはかなり面倒なものです。そこでCoffeeScriptは`=>`を開発しました。`=>`と`->`の違いは`this`を束縛するかどうかです。どういうことかというと`=>`で関数を作った場合、その関数がどこでどう呼び出されようが、`this`つまり`@`は**関数を作った時のインスタンスになります**。どうやってそうしているのかはJavaScriptに変換してみるとわかりますのでぜひ確認してください。
26
26
 
27
27
 
28
28