

CoffeeScriptで書かれたjQueryプラグインを読んでいるのですが、@の記述がよくわかりません。下記のような使われ方をしているのですが、これは何を表しているのでしょうか。

[code]

    self = @
    
[/code]

また、@はJavascript、jQueryにおいてどんな意味を持ちますか？  
本で探しても@に関する記述がなく困っています。


CC BY-SA 3.0
2015-07-30T01:03:53.763
12817
2016-01-16T04:11:12.247
2016-01-14T13:53:37.760
8000
10719
question
javascript jquery coffeescript
"self = @" の "@" はどういう意味ですか？


[本家サイト](http://coffeescript.org/) の説明の  
**All together now:**  
の対比表の部分で、

>
[code]

>     CoffeeScript  JavaScript
>     @, this          this
>  
[/code]

になっているので、JavaScriptで言う`this`を表す（同じと考えていい）ようです。  
_As a shortcut for this.property, you can use @property._  
という説明があるので、  
`this.property`を`@property`のように書くためのショートカットのようです。


CC BY-SA 3.0
2015-07-30T01:24:39.853
12819
2015-07-30T01:24:39.853
5044
12817
answer


JavaScriptは何処から呼び出したかによって同じ文脈でもthisの意味が変化します。  
CoffeeScriptでは@を使う事でthisのタイプ数を減らす以外にもかっこいい使い方が出来ます。

例えばこんなことしたい場合です。

[code]

    hoge = function() {
      var foo;
      this.piko = 123
      foo = function() {
        return this.piko
      }
    }
    
[/code]

この時上で宣言した`pikoプロパティ`は`foo関数`の中では使う事が出来ません。  
どうしても使いたい場合は、少々小細工が必要になります。

[code]

    hoge = function() {
      var self = this;
      var foo;
      this.piko = 123;
      foo = function() {
        return self.piko
      }
    };
    
[/code]

コレを実現する為にCoffeeScriptで書くとこうなります。

[code]

    hoge = ->
      @piko = 123
      foo = =>
        @piko
    
[/code]

この時thisを無名関数の中に持って入りたい時は、  
`=>`で関数定義するだけで２つ目のような迂回するJavaScriptを生成することが出来ます。  
（これは似たような仕様がES6で採用されたかと思います）


CC BY-SA 3.0
2016-01-14T13:07:57.560
20924
2016-01-16T04:11:12.247
2016-01-16T04:11:12.247
4191
13999
12817
answer