2011-12-27 5 views
1

나는 spine.js 문서를 읽고 있는데 함수 선언에 대해 조금 궁금해합니다. 다큐먼트에서 내가 항상 Coffeescript 함수 선언 func : - 또는 func = ->?

constructor: -> 
    super 
    .... 

를 읽을 수 있지만, 그렇지 않으면 난 항상

constructor = -> 
    super 
    .... 

을 읽을 그래서 다음과 같습니다과 = 함수 선언에 대한 동등한?

+3

컴파일 된 자바 스크립트는 어떤 모습입니까? – asawyer

답변

9

번호

클래스를 정의하는, 약간 다르게 다른 곳에서하지보다 : 작품. 클래스 정의에서 :은이 함수를 프로토 타입 (인스턴스 메소드)에 메서드로 넣는 것을 의미합니다. constructor:은 생성자 함수로 사용되는 특별한 경우입니다.

컴파일 된 자바 스크립트를 보면 차이가 분명합니다.

class Foo 
    constructor: -> @foo = 'foo' 
    method: -> 

var Foo; 
Foo = (function() { 
    function Foo() { 
    this.foo = 'foo'; 
    } 
    Foo.prototype.method = function() {}; 
    return Foo; 
})(); 

당신은 생성자를 볼 수있는 생성자입니다 (! 좋은)이로 컴파일 및 방법은 프로토 타입입니다. 사용할 때

그러나 = 당신은 단순히 로컬 변수를 할당하고 기능은 정말 생성자 또는 프로토 타입과 클래스의 일부가 아닌 (! 나쁜)

class Bar 
    constructor = -> @bar = 'bar' 
    method = -> 

이에 컴파일

var Bar; 
Bar = (function() { 
    var constructor, method; 
    function Bar() {} 
    constructor = function() { 
    return this.bar = 'bar'; 
    }; 
    method = function() {}; 
    return Bar; 
})(); 

커피 스크립트 구문에 대한 많은 문제는 컴파일 된 결과를보고 발견하거나 해결할 수 있습니다. 그리고 이것은 또한 내가 자바 스크립트를 알지 못하는 사이에 커피 스크립트를 배우는 것을 권장하지 않는 이유입니다. 왜냐하면 자바 스크립트가 무엇을 컴파일 하는지를 모르는 경우에는 이해하지 못하는 것들이 있기 때문입니다.

+0

답장을 보내 주셔서 감사합니다 :) – soupdiver

+1

+1 "커피 스크립트 구문에 관한 많은 문제는 컴파일 된 결과를보고 간단히 발견하거나 해결할 수 있습니다." 어떤 종류의 오류라도 치면 컴파일 결과를보십시오. 특히 "예기치 않은 들여 쓰기"와 같은 구문 오류의 경우 미리보기를 붙여넣고 즉각적인 피드백을 얻을 수있는 "Try it"페이지로 브라우저 창을 열면 정말 유용합니다. – Thilo

+0

+1, 나는 http://js2coffee.org/ js 패널에서 커피를 좋아한다. – Guillaume86

관련 문제