gpt4 book ai didi

Coffeescript 类共享属性

转载 作者:行者123 更新时间:2023-12-02 21:47:00 27 4
gpt4 key购买 nike

我在 CoffeeScript 中检测到一个非常奇怪的行为。

class Foo
list: []
add: (val)->
@list.push(val)


x = new Foo()
x.add(1)
console.log(x.list.length) // 1

y = new Foo()
y.add(1)
console.log(y.list.length) // 2

正如您所看到的,@list 属性以一种奇怪的方式在两个类实例之间共享。我以前从未在 CoffeeScript 中遇到过类似的问题。

最佳答案

将其转换为 JavaScript:

var Foo, x, y;

Foo = (function() {
function Foo() {}

Foo.prototype.list = [];

Foo.prototype.add = function(val) {
return this.list.push(val);
};

return Foo;

})();

如您所见,Foo.prototype.listprototype 的属性,而不是类实例的属性。只有一个数组,它将在类的所有实例之间共享。

要使 list 成为实例变量,请将其添加到构造函数中:

class Foo
constructor: ->
@list = []

add: (val)->
@list.push(val)

关于Coffeescript 类共享属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19354847/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com