Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coffeescript 咖啡脚本中的公共类成员_Coffeescript - Fatal编程技术网

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。然后我必须使用函数调用,而不是简单的属性访问。对于一种基于语法的语言来说,这感觉很

我对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
只做

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