我意识到在CoffeeScript @someVar
translated到this.someVar
。是否有任何类似的运算符可用于访问类成员?请考虑以下示例:
class @SleepTracking
@sleepQualities = ["none", "nervous", "quiet"]
@timeFormat = "H:mm:ssZ"
constructor: (value) ->
# Initialization
doSomething: ->
# How to access timeFormat except using SleepTracking.timeFormat ?
除了timeFormat
之外,还有其他方法可以访问类函数中的SleepTracking.timeFormat
吗?
更新
变量是使用@
定义的,因此可以在类的范围内使用它们而无需实例化类。例如:
someFunction = () ->
validQuality = SleepTracking.sleepQualities
# Do something
答案 0 :(得分:0)
class SleepTracking
@sleepQualities = ["none", "nervous", "quiet"]
@timeFormat = "H:mm:ssZ"
constructor: (value) ->
@timeFormat = SleepTracking.timeFormat
doSomething: ->
@timeFormat
st = new SleepTracking()
console.log SleepTracking.timeFormat
console.log st.doSomething()
最近我可以看到你做的是这样的事情。它为您提供对变量的静态访问,但也允许在实例化类的函数内使用。你必须设置构造函数属性有点垃圾:(
转到http://coffeescript.org/和Try Coffeescript
标签即可开始使用。
答案 1 :(得分:0)
您可以使用constructor
property来获取“课程”:
返回对创建实例原型的
Object
函数的引用。请注意,此属性的值是对函数本身的引用,而不是包含函数名称的字符串。
所以给出这样的东西:
class C
m: -> ...
您可以查看@constructor
内的m
并获取C
。请注意,这正确处理子类化,因此:
class C
@cp = 11
m: -> console.log(@constructor.cp)
class D extends C
@cp = 23
class E extends C
(new C).m()
(new D).m()
(new E).m()
将11,23和11转储到控制台(demo)。
在你的情况下,你会有这样的事情:
doSomething: ->
format = @constructor.timeFormat
#...
答案 2 :(得分:0)
除了
SleepTracking.timeFormat
之外,还有其他方法可以在类函数中访问timeFormat吗?
我不这么认为。但是,您可以为它们使用类范围的别名:
class @SleepTracking
sleepQuals = @sleepQualities = ["none", "nervous", "quiet"]
@timeFormat = "H:mm:ssZ"
consts = @
doSomething: ->
SleepTracking.timeFormat === consts.timeFormat
SleepTracking.sleepQualities === sleepQauls
变量(sleepQuals
)方法最适合常量(或对可变对象/数组的常量引用),而类名别名(consts
)只是名称缩短和简化重命名班上的。但我认为写SleepTracking
只是最不容易混淆。