Need help understanding class member meanings
rayzorben opened this issue · 1 comments
I noticed that you can put class members outside of the constructor in a class such as
class Test
@foo = "foo" # static variable
bar = "bar" # private variable
baz: "baz" # instance variable accessible by @bazThe last one, the 'instance variable' seems to work, but has unexpected behavior when it comes to arrays. Other values are re-initialized across instantiations, but array variables are not
class Test
here: []
test: 0
constructor: (value, value2) ->
@here.push value
console.log @here
console.log @test
@test = value2
console.log @test
testa = new Test 'a', 1
testb = new Test 'b', 2As you can see here, test always starts out at 0, but here doesn't get re-initialized and will keep getting new values pushed onto the old array, which I find odd.
Output:
[ 'a' ]
0
1
[ 'a', 'b' ]
0
2
class Test
@foo = "foo" # static member (shorthand for `Test.foo = "foo"`)
bar = "bar" # class-scoped variable (behaves like a private static)
baz: "baz" # instance memberWith : in a class body you assign a prototype property. This is only done once.
Unless the value is a primitive, all class instances inherit the same object reference, which causes the behavior you see.
Default values for non-primitives should be assigned in the constructor (@member = value).