CoffeeScript variable d'instance
Je suis en train d'apprendre CoffeeScript, et j'ai un petit mal de tête je n'ai pas encore été en mesure de comprendre. Si je crée un objet de faire certaines choses, j'ai parfois besoin d'une variable d'instance de cet objet à être partagé entre les méthodes. Par exemple, j'aimerais faire ceci:
testObject =
var message # <- Doesn't work in CoffeeScript.
methodOne: ->
message = "Foo!"
methodTwo: ->
alert message
Cependant, vous ne pouvez pas utiliser var
en CoffeeScript, et sans que la déclaration message
n'est visible à l'intérieur de methodOne
. Alors, comment voulez-vous créer une variable d'instance dans un objet en CoffeeScript?
Mise à jour: correction d'une faute dans mon exemple, de sorte que les méthodes sont en fait des méthodes d' 🙂
BTW, je suis conscient que je pouvais faire
Vous pouvez également définir
Lorsque j'essaie
Oh oui, comme la réponse correcte mentionné, vous avez été l'attribution
message = ""
, mais vraiment, je veux juste la variable à null afin que je puisse régler le comportement en fonction de l'existence plutôt que de plus en plus complexes, vérifier pour voir si elle n'est pas "vide", etc.Vous pouvez également définir
message = null
qui est ce que vous voulez non?Lorsque j'essaie
message = null
- je obtenir ParseError Unexpected 'TERMINATOR'
Oh oui, comme la réponse correcte mentionné, vous avez été l'attribution
testObject
à un objet =
et non pas une fonction = ()->
OriginalL'auteur Andrew | 2012-04-12
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas comme ça. Pour citer le la langue de référence:
Cependant, ce que vous essayez de le faire ne serait pas possible en JS, il serait équivalent à
qui n'est pas valide JS, que vous ne pouvez pas déclarer une variable dans un objet comme cela; vous devez utiliser des fonctions pour définir des méthodes. Par exemple en CoffeeScript:
Vous pouvez également utiliser
@
comme un raccourci pour '.', c'est à dire@message
au lieu dethis.message
.Également envisager d'utiliser CoffeeScript est classe de syntaxe:
OriginalL'auteur Lauren
Juste pour ajouter à @Lauren réponse, ce que tu voulais est fondamentalement la motif de module:
Où
message
est un "privé" variable disponible uniquement à ces méthodes.En fonction du contexte, vous pouvez également déclarer message avant de l'objet de sorte qu'il est disponible pour les deux méthodes (si elle est exécutée dans ce contexte):
Correct, mais ton code est un peu buggé:
do
il suffit de créer une fermeture, par conséquent, vous ne pouvez définir des propriétés, mais doit utiliser vars la place (methodOne = ->...
etc.) Aussi, la demande de retour doit probablement être{methodOne:methodOne, methodTwo:methodTwo}
. Bien sûr, vous pourriez mettre votre définitions de méthode à droite dans l'instruction de retour à la place...L'instruction return est à l'aide de déstructuration d'affectation.
très cool
OriginalL'auteur Ricardo Tomasi
Vous pouvez définir la propriété avec:
Mais, vous n'êtes pas en train de définir des méthodes d'-vous avez besoin de->
pour cela.Alors, pour faire référence à des propriétés d'une instance dans les méthodes, le préfixe des noms de propriété avec
@
.->
n'est pas nécessaire: voir ma version fixevotre version n'est pas fixe; comme vous pouvez le voir en appuyant sur " Run " sur cette page, ce serait montrer une boîte de dialogue d'alerte immédiatement, et ce n'est probablement pas ce que Andrew est après, plus il est probable qu'il souhaite reporter son exécution jusqu'à ce que la méthode est appelée.
C'est pour les fonctions/méthodes. Sans elle,
methodTwo
est réglé sur le résultat de l'appelalert
, pas une fonction qui appelle à son touralert
.Mon mauvais, fixe en réponse
Merci pour la capture de la faute de frappe, je l'ai corrigé. Mon vrai code de la
->
.OriginalL'auteur Jonathan Lonowski
Utilisation
@
à point àthis
version fixe sur coffeescript.org
OriginalL'auteur Kristoffer Sall-Storgaard