2012-11-17 2 views
1

이것은 이전 질문 인 Javascript: ReferenceError: MyClass is not defined에 대한 후속 조치입니다.CoffeScript의 외부 범위에 대한 클래스 정의

이 .js로 변환 된 .coffee 파일은 해당 범위 내에서만 사용 가능한 MyClass을 만듭니다.

class MyClass 
    name: (name) -> 

CoffeScript에서 클래스를 외부 범위에서 사용할 수있게 할 방법이 있습니까? HTML 페이지의 파일 <script src..에 액세스 할 수 있어야하고 콘솔에서 클래스를 인스턴스화해야합니다.

답변

3

당신이 어떻게하는지에 관계없이 "전역 범위를 오염시킬 것"입니다. 당신이 어떻게하는지에 관한 문제 일뿐입니다.

CoffeeScript의 @ 기호는 "이 범위"를 의미하는 데 사용됩니다. 따라서 클래스 정의에서도 사용할 수 있습니다. 클래스 선언의 결과는 해당 클래스가 window 객체의 범위에 정의되어 있다는 것입니다 (다른 상황이 아닌 한 여기에서 설명하는 것과 다를 수 있음).

class @CustomClassName 
    constructor: -> 
     # constructor stuff goes down... 

그러나, 나는 개인적으로, 네임 스페이스와 함께이 작업을 수행하는 것을 선호합니다. 약 google.maps.Map 또는 Actionscript 3 : flash.display.MovieClip을 작성한 적이 있다고 생각하십시오. 당신이 당신의 클래스를 만들 때, 당신이 말할 수있는 지금

window.customnamespace = window.customnamespace || {} 

: 당신의 커피 스크립트 파일의 맨 위에

이의 라인을 따라 뭔가를 넣어 당신의 document.ready (경우에

class customnamespace.ClassName 
    constructor: (container) -> 
     # set the container 
     @container = container 
     # etc... 

class customnamespace.OtherClassName 
    constructor: -> 
     # Another class... 

당신 jQuery를 사용하면) 네임 스페이스와 모든 클래스에 대한 전역 액세스 권한을 갖게됩니다.

예 :

$(document).ready(function(e) { 
    var c = new customnamespace.ClassName($('#container')); 

    var other = new customnamespace.OtherClassName(); 

만들기 의미?

1

This stackoverflow은 매우 훌륭한 예제가 포함 된 coffeescript로 전역 개체를 만드는 것에 대한 매우 포괄적 인 개요를 제공합니다. 이 예를 들어

커피 스크립트 : 이전의 질문에 대한 답변과 같은 동작을 줄 것이다

var MyClass; 

window.MyClass = MyClass = (function() { 

    function MyClass() {} 

    MyClass.prototype.name = function(name) {}; 

    return MyClass; 

})(); 

:

window.MyClass = class MyClass 
    name: (name) -> 

가 컴파일됩니다.

관련 문제