Reputation: 23108
I am very new to coffeescript, and I have been trying to find a way to make publicly accessible class members. If I run the following code:
class cow
n = 7
moo: ->
alert("moo")
bessie = new cow
alert(bessie.n);
It will show that bessie.n
is undefined. The only solution I can find is to make getters and setters like n: -> n
and setN: (value) -> n = value
. I then must use function calls instead of simple property accesses. This feels cumbersome for a language which sells itself based on syntactic sugar.
Is there something I missed in the documentation that makes it easier to make classes with simple public members? What is the best practice for this?
Upvotes: 3
Views: 3182
Reputation: 21
when you need a private member, you typically can't use a private static member in its place.
The concept of private variables is easily implemented via Crockfords suggestions, but this isn't a proper CoffeeScript class and as such you can't extend it. The winner is that you get an object with methods where no one else can read/write your variable making it a little more foolproof. Note you don't use the 'new' keyword (which Crockford considers a bad practice anyway)
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
Upvotes: 0
Reputation: 18953
It's no different from setting methods.
Just try this
class cow
n: 7
Doing only
class cow
n = 7
Will just set private variable inside the class closure.
Use try coffeescript link on http://coffeescript.org/ to see what it compiles to.
Upvotes: 10