Coffeescript 咖啡脚本中的公共类成员
我对coffeescript非常陌生,我一直在试图找到一种方法,让公开访问的类成员。如果我运行以下代码:Coffeescript 咖啡脚本中的公共类成员,coffeescript,Coffeescript,我对coffeescript非常陌生,我一直在试图找到一种方法,让公开访问的类成员。如果我运行以下代码: class cow n = 7 moo: -> alert("moo") bessie = new cow alert(bessie.n); 它将显示bessie.n未定义。我能找到的唯一解决方案是使getter和setter像n:->n和setN:(value)->n=value。然后我必须使用函数调用,而不是简单的属性访问。对于一种基于语法的语言来说,这感觉很
class cow
n = 7
moo: ->
alert("moo")
bessie = new cow
alert(bessie.n);
它将显示bessie.n
未定义。我能找到的唯一解决方案是使getter和setter像n:->n
和setN:(value)->n=value
。然后我必须使用函数调用,而不是简单的属性访问。对于一种基于语法的语言来说,这感觉很麻烦
我在文档中是否遗漏了一些东西,使使用简单的公共成员创建类变得更容易?这方面的最佳实践是什么?它与设置方法没有什么不同 试试这个
class cow
n: 7
只做
class cow
n = 7
将只在类闭包内设置私有变量
使用try coffeescript link on查看它编译成什么。当您需要私有成员时,通常不能使用私有静态成员代替它 私有变量的概念很容易通过Crockfords建议实现,但这不是一个合适的CoffeeScript类,因此您无法扩展它。赢家是你得到了一个对象,这个对象的方法没有其他人可以读/写你的变量,这使得它更简单。请注意,您没有使用“new”关键字(Crockford认为这是一种不好的做法)
我把
n=7
放进去初始化它,但现在我发现这对于私有变量来说更容易分析<代码>n:7更像是一个属性。谢谢还要注意的是,设置“n=7”对于类的所有实例来说都是通用的。那么它就像一个私有静态?很高兴知道。有趣的事实:class
是在CoffeeScript中创建函数的唯一方法,而不是->
和=>
。与->
或=>
不同,该函数会立即运行,但在其他方面是正常的。只有当您使用键值语法:
来定义原型属性(和构造函数
)时,它的特殊性才会显现出来。
Counter = (count, name) ->
count += 1
return {
incr : ->
count = count + 1
getCount : ->
count
}
c1 = Counter 0, "foo"
c2 = Counter 0, "bar"
c3 = Counter 0, "baz"
console.log c1.getCount() # return 1 regardless of instantiation number
console.log c1.count # will return undefined