Class Coffeescript类和变量

Class Coffeescript类和变量,class,coffeescript,Class,Coffeescript,假设我有一个像这样的Coffeescript课程: class Foo aVar = 'foo' someFunction = -> anotherVar = 'bar' 有没有一种方法可以将anotherVar设置为类变量,而不必将其声明为null,如下所示: class Foo aVar = 'foo' anotherVar = null someFunction = -> anotherVar = '

假设我有一个像这样的Coffeescript课程:

class Foo
    aVar = 'foo'

    someFunction = ->
        anotherVar = 'bar'
有没有一种方法可以将
anotherVar
设置为类变量,而不必将其声明为null,如下所示:

class Foo
    aVar = 'foo'
    anotherVar = null

    someFunction = ->
        anotherVar = 'bar'

你听说过
这个
关键字吗?:)CoffeeScript将
@
映射到

class Foo
    aVar = 'foo'

    someFunction: ->
        @anotherVar = 'bar'

不,你不能。让我们看一个简单的类:

class C
    cv = null
    m: -> cv
转换为此JavaScript的:

var C = (function() {
  var cv;
  function C() {}
  cv = null;
  C.prototype.m = function() {
    return cv;
  };
  return C;
})();
您会注意到,“私有类变量”
cv
只是构建
C
的自执行函数中的一个局部变量。因此,如果我们想在
C
中添加一个新的“私有类变量”,我们必须再次打开匿名函数的作用域并添加新变量。但是没有办法回溯时间,改变已经执行的函数的范围,所以你就不走运了


当您定义它时,您不必将您的
anotherVar
定义为
null
,但您必须将它初始化为某个值。

但这使它成为一个“公共”(静态)变量,我希望它是“私有”的,例如,它只存在于类中,并且可以在类中访问。JavaScript中没有私有变量这样的东西。这是一件事。第二个:
someFunction
映射到
Foo
prototype
属性。您上面编写的代码甚至无法工作。原型函数只能访问
上下文中的变量。如果你想使用私有变量,那么你必须在
Foo
的构造函数中用
@
前缀定义
someFunction
!我已经更新了我的问题,以反映对
someFunction
的重写。但是,您可以通过利用函数包装器在某些上下文中模拟private:@muistooshort哦,是的。我忘了CoffeeScript在匿名函数中再次封装了所有内容。谢谢你再次提醒我!Lame,我认为可能有一种方法,就像你可以通过预先添加
@
来处理静态变量一样;哦,好吧!