Class Coffeescript类和变量
假设我有一个像这样的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 = '
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,我认为可能有一种方法,就像你可以通过预先添加@
来处理静态变量一样;哦,好吧!