arcturo/library

Instance properties

Opened this issue · 1 comments

According to the book (https://arcturo.github.io/library/coffeescript/03_classes.html) instance properties can be created in the following way:

class Animal
  price: 5 # instance property according to the book
  sell: (customer) ->

animal = new Animal
animal.sell(new Customer)

But when I checked generated JavaScript code it looks like price property was added to the prototype 😕...

Well, if you try to use it I guess in that case it will magically work because the number type in JavaScript is immutable, but let me just show you an example with mutable field:

class Store
 products: [] # instance property?

 addProduct: (name) ->
  @products.push(name)

foodStore = new Store
foodStore.addProduct 'milk'

motoStore = new Store
motoStore.addProduct 'tyre'

console.log motoStore.products # ['milk', 'tyre'], boom

So obviously products property was added to the prototype and it's shared by both instances.

Oh, I've just noticed the same issue was already raised here: #80