11

私はCoffeeScriptを学んでいますが、理解できていない小さな頭痛の種が1つあります。特定のことを行うためにオブジェクトを作成する場合、そのオブジェクトをメソッド間で共有するためのインスタンス変数が必要になることがあります。たとえば、私はこれをしたいと思います:

testObject = 

  var message # <- Doesn't work in CoffeeScript.

  methodOne: ->
    message = "Foo!"

  methodTwo: ->
    alert message

varただし、 CoffeeScriptで使用することはできません。その宣言messageがないと、内部でのみ表示されmethodOneます。では、CoffeeScriptのオブジェクトにインスタンス変数をどのように作成しますか?


更新:私の例のタイプミスを修正して、メソッドが実際にはメソッドになるようにしました:)

4

4 に答える 4

12

あなたはそれが好きではありません。言語リファレンスを引用するには:

varキーワードに直接アクセスできないため、意図的に外部変数をシャドウイングすることはできません。参照することしかできません。したがって、深くネストされた関数を作成している場合は、外部変数の名前を誤って再利用しないように注意してください。

ただし、JSでも実行しようとしていることは不可能であり、次のようになります。

testObject = {
    var message;
    methodOne: message = "Foo!",
    methodTwo: alert(message)
}

このようなオブジェクトで変数を宣言することはできないため、これは有効なJSではありません。メソッドを定義するには関数を使用する必要があります。たとえば、CoffeeScriptの場合:

testObject =
    message: ''
    methodOne: ->
        this.message = "Foo!"
    methodTwo: ->
        alert message

@'this。'のショートカットとして、つまり。の@message代わりに使用することもできますthis.message

または、CoffeeScriptのクラス構文の使用を検討してください。

class testObject
    constructor: ->
        @message = ''

    methodOne: ->
        @message = "Foo!"

    methodTwo: ->
        alert @message
于 2012-04-12T21:31:49.747 に答える
5

@Laurenの答えに追加するだけで、必要なのは基本的にモジュールパターンです。

testObject = do ->

  message = null

  methodOne = ->
    message = "Foo!"

  methodTwo = ->
    alert message

  return {
    methodOne
    methodTwo
  }

messageこれらのメソッドでのみ使用できる「プライベート」変数はどこにありますか。

コンテキストによっては、オブジェクトの前にメッセージを宣言して、両方のメソッドで使用できるようにすることもできます(このコンテキストで実行された場合)。

message = null

testObject = 
  methodOne: -> message = "Foo!"
  methodTwo: -> alert message
于 2012-04-13T00:09:57.717 に答える
1

プロパティは次のように定義できます。

message: null

ただし、現在、メソッドを定義しているわけではありません。そのために必要->です。

次に、メソッド内のインスタンスプロパティを参照するには、プロパティ名の前に。を付け@ます。

testObject = 

  message: null

  methodOne: ->
    @message = "Foo!"

  methodTwo: ->
    alert @message
于 2012-04-12T21:29:30.617 に答える
0

@を指すために使用this

testObject = 

  methodOne: ->
    @message = "Foo!"

  methodTwo: ->
    alert @message

coffeescript.orgの修正バージョン

于 2012-04-12T21:32:44.163 に答える