CoffeeScript: Getter/Setter dans les Initialiseurs d'Objets

ECMAScript nous permet de définir des accesseurs ou setters comme suit:

[text/javascript]

var object = {
  property: 7,
  get getable() { return this.property + 1; },
  set setable(x) { this.property = x / 2; }
};

Je peux contourner si je suis en utilisant un classe:

[texte/coffeescript]

"use strict"

Function::trigger = (prop, getter, setter) ->
      Object.defineProperty @::,
              get: getter
              set: setter               

class Class
      property: ''

      @trigger 'getable', ->
               'x'

      member: 0

Mais que faire si je veux définir le déclencheur sur la objet directement - sans à l'aide de defineProperty /-ies. Je veux faire quelque chose comme (c'est pas de travail de cette façon):

[text/x-pseudo-coffeescript]

object =
  property: 'xhr'
  get getable: 'x'

Il fonctionne en JavaScript sans aucun problème et je ne veux pas que mes scripts de régresser quand je suis en utilisant CoffeeScript. N'est-il pas un moyen de le faire aussi à l'aise que dans le JavaScript/ECMAScript? Merci.

  • Pas pour le moment :(. Un formulaire de demande de devis FAQ: Q: allez-vous ajouter de la fonctionnalité X où X dépend de la plate-forme? R: Non, la mise en œuvre de fonctionnalités spécifiques ne sont pas autorisés en tant que politique. Tout ce que vous écrivez en CoffeeScript doit être pris en charge et praticable, sur tout le JavaScript de mise en œuvre (dans la pratique, cela signifie que le plus petit dénominateur commun est IE6). Ainsi, les fonctionnalités suivantes ne seront pas mises en œuvre: les accesseurs & setters, le rendement. Je pense que le fait d'avoir getter & poseur de syntaxe littérale serait une belle fonctionnalité d'opt-in pour CoffeeScript.
  • Merci, c'est ce que je voulais savoir. - Mais: Est-il possible de construire une telle fonctionnalité d'opt-in pour CoffeeScript proprement (sans modifier le compilateur directement)?
  • Je ne qui serait possible. Il y a branche qui les met en œuvre, mais il n'a pas été maintenue pendant une longue période, il semble (et je ne le recommande pas à l'aide d'un CoffeeScript fourche juste pour cette fonction). J'ai ajouté une réponse à mon commentaire précédent et un peu plus d'informations.
  • Errata: je ne pense pas que ce serait possible 😛
InformationsquelleAutor fridojet | 2012-07-20