这可能是显而易见的,但是......从概念上讲,coffescript 不能做任何你在 javascript 中做不到的事情。现在您的 someFunction 定义是一个局部变量,并且没有声明为实例上的属性(与 getText 不同)。
当您在 someFunction 中使用 '@' 时,我假设您希望它引用 Example 的实例,这在您的情况下会很方便,但是 someFunction 没有在示例中定义。
如果您使用 => 表示法,它仍然不会将其绑定到实例(它将引用类函数)。现在这可能看起来不方便,或者是一个奇怪的设计选择,但它实际上是一致的。再一次, someFunction 不在实例上,它被定义为 Example 类函数中的局部变量。
如果你使用 ->,'@' 指的是那个函数的 javascripts 'this'(它是局部变量,显然不包含 getText)。如果您使用 => 它在定义时引用 javascripts 'this',此时它是 Example 类函数。您想要引用的 Example 实例甚至还没有创建(尽管您希望引用它)。
@ 引用 getText 等函数中的示例实例的原因是因为 javascripts this 关键字引用了您定义的对象。Coffeescript 确实没有什么不同,除了在函数定义时为您提供一种方便的语法来引用“this”。
TLDR:
您无法真正完成您要寻找的东西,并且您可能不得不放弃在实例上使用“私有”功能的想法我能看到您做的最好的事情就是您在上面的评论中已经描述的
Example.prototype.getText()
因为您可以引用此方法的两种方式是通过实例和 Example.prototype(函数在其上定义)。由于您的方法未在实例上定义,因此您不能使用“this”。但是,如果您从原型中调用该方法,您的 getText 函数无论如何都会失败。
getText: ->
@text
@text 指的是 getText 的定义,在这种情况下它是原型(而不是实例)。原型上的文本未定义。
如果你想让这个方法按照你期望的方式运行,你可能不得不让它不是“私有的”。Javascript/Coffeescript 没有 public 和 private 之类的访问修饰符,私有方法实际上是在特定范围内定义的函数。在这种情况下,该范围无法访问您想要的内容,并且 this 关键字不引用您需要的内容。