2012-07-04 2 views
4

다음은 내가하려는 일의 예입니다.CoffeeScript 프로토 타입 오류

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라는 오류 받고 있어요 "catch되지 않은 형식 오류 : 개체 번호가있는 방법이 없습니다를 '나 displayName'"나는이 오류를 받고 있어요 왜

정말 확실하지. 어떤 도움이라도 대단히 감사합니다.

+0

http://coffeescript.org/#classes를 참조하지만, 당신이 그것에 클래스를 선언하는 방법이 아니에요. 참조 : http://coffeescript.org/#classes – Zirak

답변

4

,이 프로토 타입을 공유하지 않습니다. 적절한 생성자는 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}" 

당신은 단지 표준 생성자 함수를 생성 커피 스크립트의 class 추상화의 장점이 걸릴 수도 있습니다 :

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}" 

이 기능적으로 상기와 동일을, 여기에 basicInfo 및 은 이미 prototype에 있습니다. 이를 통해 User::displayName = -> console.log @name이 정상적으로 작동합니다.

내가 잘 CFS에 정통한 아니에요

4

coffeescript에서 javascript를 복사하려고합니다. 심하게.

CoffeeScript에서는 키워드 class을 사용하여 원하는 작업을 수행 할 수 있습니다 (정적 메서드와 프로토 타입 메서드를 혼합하여 사용).

class User 
    constructor: (@name, @dob) -> 

    displayName: -> 
     console.log @name 

bob = new User "Bob", "10/12/69" 

bob.displayName() // "Bob" 

더 많은 정보 : 생성자에서 새 개체를 반환하는 경우 http://coffeescript.org/#classes

+0

보통 coffeescript를 올바르게 사용하려면 자바 스크립트에 대해 * 더 * 알아야합니다. 이 질문은 CS vs JS와는 아무런 관련이 없지만 생성자 함수가 어떻게 작동하는지에 대한 오해가 있습니다. –

+0

이 문법은 "User :: displayName ->" – rai

+0

왜'class' 키워드를 사용했다면 작동할까요? –