我正在为Ubersicht编写一些小部件。它使用node.js服务器并将每个.coffee
文件视为独立的小部件对象。我在定义要在整个文件中使用的常量设置时遇到问题。目前我知道两种在文件顶部定义这种常量的方法。coffeescript变量赋值的范围与对象其他属性中的属性赋值
# Way 1
foo_1 = true
bar_1 = false
# Way 2
foo_2: true
bar_2: false
进一步向下在同一个文件中,属性被分配为字符串或作为函数。以上两种定义选项的方法都只适用于两种属性类型之一。
staticProperty: """Output #{foo_1} works here
but output of #{foo_2} doesn't work
"""
methodProperty: (input) ->
if foo_1 # Raises foo_1 is not defined
if @foo_1 # foo_1 is undefined which is expected
if @foo_2 # This works fine
我的理解是这样2添加到该对象的属性,但我不太确定的方式分配1如何工作给予该文件基本上是定义对象。你能解释一下吗?
还有一种方法来定义可以从两个地方访问的变量?
这是非常丰富和清除了很多东西了。 Ubersicht对该对象做了几件事。首先将.coffee文件作为文本读入并通过'eval'。这不应该是一个问题。我认为这个问题是,对象被复制到一个新的对象,比如'new [k] = v for k,v of old',因此它丢失了所有的私有变量。这就是为什么'foo_1'没有定义。用'@ :: foo_2'尝试''不能读取'undefined'的属性'foo_2'。这我还不明白。 – 2014-12-08 18:50:04
“@ :: foo_2”错误可能是由于某些情况下的复制造成的,如果Ubersicht只是用'for ... of'循环复制属性,那么你将失去原型的跟踪(AKA'@ :: ')。如果它将方法视为普通函数,它也可能会丢失“@”的踪迹。 – 2014-12-08 19:56:15