CoffeeScript prototype error

coffeescript, javascript

Solution

When you return a new object from the constructor, it doesn't share the prototype. A proper constructor adds properties/methods to `this`:

User = (name,dob,rank,score) -> 
  @name = name
  @dob = dob
  @details =
    rank: rank
    score: score 
  @basicInfo = -> return "Name: #{@name} - Dob: #{@dob} - #{@details.rank} "
  @detailedInfo = -> return "Name: #{@name} - Rank: #{@details.rank} - Score: #{@details.score}"

You might want to take advantage of CoffeeScript's `class` abstraction, which just generates standard constructor functions:

class User
  constructor: (name, dob, rank, score) ->
    @name = name
    @dob = dob
    @details:
      rank: rank
      score: score 
  basicInfo: ->
    return "Name: #{@name} - Dob: #{@dob} - #{@details.rank} "
  detailedInfo: ->
    return "Name: #{@name} - Rank: #{@details.rank} - Score: #{@details.score}"

This is functionally the same as above, except that `basicInfo` and `detailedInfo` here are already in the `prototype`, where they should be. With this, `User::displayName = -> console.log @name` should work fine.

See http://coffeescript.org/#classes

Problem

Here's an example of what I'm trying to do. ``` User = (name,dob,rank,score) -> { name: name dob: dob details: { rank: rank score:score } basicInfo: -> return "Name: #{@name} - Dob: #{@dob} - #{@details.rank} " detailedInfo: -> return "Name: #{@name} - Rank: #{@details.rank} - Score: #{@details.score}" } User::displayName = -> console.log @name bob = new User("Bob","10/12/69",1,100000) bob.displayName() ``` I'm getting an error that says "Uncaught TypeError: Object # has no method 'displayName'" Not really sure why I'm getting this error. Any help is greatly appreciated.

Original source