Это может быть очевидно, но ... coffescript не может ничего сделать концептуально, вы уже не могли бы сделать в javascript. В настоящее время определение someFunction является локальной переменной и не объявляется как свойство экземпляра (в отличие от getText).
Когда вы используете '@' внутри someFunction, я предполагаю, что вы ожидаете, что он ссылается на экземпляр примера, что было бы удобно в вашем случае, однако someFunction не определен на примере.
Если вы использовали обозначение =>, оно все равно не привязывало бы его к экземпляру (это относится к функции класса). Теперь это может показаться неудобным или нечетным выбором дизайна, но его на самом деле непротиворечивым. Еще раз, someFunction не находится в экземпляре, его определяется как локальная переменная в функции класса Example.
Если вы используете ->, '@' относится к javascripts 'this' для этой функции (которая является локальной переменной и, очевидно, не содержит getText). Если вы используете =>, это относится к javascripts «this» во время определения, которое в данный момент является функцией класса класса. Экземпляр Example, к которому вы хотите обратиться, еще не создан (хотя вы хотите сослаться на него).
Причина @ относится к примеру экземпляра в рамках функций, таких как getText, потому что javascripts это ключевое слово относится к объекту, на котором вы определили. Coffeescript действительно ничем не отличается, кроме того, предоставляя вам удобный синтаксис ссылки на «это» во время определения функций.
TLDR:
Вы не можете сделать то, что ищете, и ваш, вероятно, придется отказаться от идеи «частного» функции на примере Лучшее, что я могу видеть, что Вы делаете это то, что вы уже описали в своих комментариях выше Example.prototype.getText()
Поскольку два способа, которыми вы сможете обратиться к этому методу, - через экземпляр и пример.прототип (который определен в функции). Поскольку ваш метод не определен в экземпляре, вы не можете использовать «this». Однако, если вы вызовете метод из прототипа, ваша функция getText будет терпеть неудачу.
getText: ->
@text
@text относится к тому, что GetText определяется на, и в этом контексте его прототип (не экземпляр). И текст прототипа не определен.
Если вы хотите, чтобы этот метод функционировал так, как вы ожидаете, вероятно, вам придется сделать его не «частным». Javascript/Coffeescript не имеют модификаторов доступа, таких как public и private, частный метод - это действительно функция, определенная в определенной области. В этом случае эта область не имеет доступа к тому, что вы хотите, и это ключевое слово не относится к тому, что вам нужно.
Там нет 'Example.getText()', но есть '@ getText' или' this.getText() '. Взгляните на скомпилированный JS, и вы увидите, что происходит. – elclanrs
@elclanrs Я пробовал, но не работал, вы тоже можете проверить: http://jsfiddle.net/uJ9xd/ –
Вы объявляете 'Example.text', но получаете доступ к' this.text'. Посмотрите на скомпилированный код https://gist.github.com/elclanrs/6102222 – elclanrs