我正在玩CoffeeScript和'class'关键字,结果如下:
var Foo, foobar;
Foo = (function() {
function Foo() {}
Foo.bar = 7;
return Foo;
})();
foobar = new Foo;
alert(foobar.bar);
输入后输入:
class Foo
@bar = 7
foobar = new Foo
alert foobar.bar
我希望bar能够保留该值,但警告会弹出undefined
答案 0 :(得分:2)
bar
是Foo
(函数)的属性,而不是它创建的实例。
如果你想在实例上bar
,你有两个选择:
在构造函数中设置它:
class Foo
constructor: () ->
@bar = 7
foobar = new Foo
alert foobar.bar
哪个转换为此JavaScript:
var Foo, foobar;
Foo = (function() {
function Foo() {
this.bar = 7;
}
return Foo;
})();
foobar = new Foo;
alert(foobar.bar);
或者将其设置在原型上:
class Foo
bar: 7
foobar = new Foo
alert foobar.bar
转换为:
var Foo, foobar;
Foo = (function() {
function Foo() {}
Foo.prototype.bar = 7;
return Foo;
})();
foobar = new Foo;
alert(foobar.bar);
答案 1 :(得分:1)
试试这个:
class Foo
constructor: ->
@bar = 7
foobar = new Foo()
alert foobar.bar
问题在于,当您在班级@
时指的是Foo
。所以在你的示例Foo.bar == 7
中,它没有在实例上设置任何东西(你可以在构造函数中做)。