我对coffeescript很陌生,而且我一直在努力寻找一种方法来制作可公开访问的班级成员。如果我运行以下代码:
class cow
n = 7
moo: ->
alert("moo")
bessie = new cow
alert(bessie.n);
它将显示bessie.n
未定义。我能找到的唯一解决方案是制作像n: -> n
和setN: (value) -> n = value
这样的getter和setter。然后我必须使用函数调用而不是简单的属性访问。对于一种基于语法糖销售自己的语言来说,这感觉很麻烦。
文档中是否遗漏了一些内容,以便更容易使用简单的公共成员创建课程?这是什么最好的做法?
答案 0 :(得分:10)
与设定方法没什么不同。
试试这个
class cow
n: 7
仅限
class cow
n = 7
只需在类闭包中设置私有变量。
在http://coffeescript.org/上使用 try coffeescript 链接查看其编译内容。
答案 1 :(得分:0)
当您需要私有成员时,通常无法在其位置使用私有静态成员。
私有变量的概念很容易通过Crockfords建议实现,但这不是一个合适的CoffeeScript类,因此你无法扩展它。获胜者是你得到一个方法,其中没有其他人可以读/写你的变量使它更加万无一失。请注意,您不使用'new'关键字(Crockford认为这是一种不好的做法)
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