1

これが私のcoffeescriptコードです。

class Hello
  constructor: ->
    @greetings()
    this.greetings()
    greetings()

  greetings: ->
    alert 'hello world'

new Hello

このコードは次のように変換されます

var Hello;

Hello = (function() {

  function Hello() {
    this.greetings();
    this.greetings();
    greetings();
  }

  Hello.prototype.greetings = function() {
    return alert('hello world');
  };

  return Hello;

})();

new Hello;

coffeescript コードの 3 番目のケースでは、 も も使用し@ませんでしthisた。私は、coffeescript が暗黙的な this を使用すると想定していましたが、そうではないようです。

簡単なグーグル検索を行いましたが、結果が得られませんでした。したがって、coffeescript が暗黙的な this をサポートしていないことを誰でも確認できます。

4

1 に答える 1

4

Coffeescript は implicit をサポートしていませんthis。ほとんどの場合、コーヒー スクリプトは実際には JavaScript の単なる糖分であり、JavaScript では、関数がファースト クラス オブジェクトであり、ローカル変数に割り当てることができることを考えると、これは非常に悪い考えです。

それでは、ローカル変数にどのようにアクセスしますか?

a = -> 123
@a = -> 456

// normal coffeescript
a() # 123

// with implicit this
a() # 123 or 456? Impossible to know.

var a;Java スクリプトでthis.aは と は互いに関係がなく、常に 2 つの個別の変数であることを覚えておくことが重要です。本当に重要なのは、いつ対処しているのかを知ることです。

@最後に、これが表記法が作成された理由です。JavaScript でクラス ベースのスタイルを使用する場合、さまざまな場所で のプロパティを参照することが非常に一般的になりthisますthis.propName@コーヒースクリプトに追加されたこの方法でプログラミングするときの退屈で煩わしいものを減らす.

于 2012-08-06T17:27:01.527 に答える