coffeescript의 정적 클래스 및 메서드


86

coffeescript에 정적 도우미 클래스를 작성하고 싶습니다. 이것이 가능한가?

수업:

class Box2DUtility

  constructor: () ->

  drawWorld: (world, context) ->

사용 :

Box2DUtility.drawWorld(w,c);

답변:


179

접두사를 붙여서 클래스 메서드를 정의 할 수 있습니다 @.

class Box2DUtility
  constructor: () ->
  @drawWorld: (world, context) -> alert 'World drawn!'

# And then draw your world...
Box2DUtility.drawWorld()

데모 : http://jsfiddle.net/ambiguous/5yPh7/

drawWorld생성자처럼 행동 하고 싶다면 다음 new @과 같이 말할 수 있습니다 .

class Box2DUtility
  constructor: (s) -> @s = s
  m: () -> alert "instance method called: #{@s}"
  @drawWorld: (s) -> new @ s

Box2DUtility.drawWorld('pancakes').m()

데모 : http://jsfiddle.net/ambiguous/bjPds/1/


4
시겠습니까 constructor: (@s) ->또한 두 번째 예제에서 작동? (즉, 수동 할당 대신 @s = s)
Tripp Lilley

1
@TrippLilley : 예, 원하는 경우 그렇게 할 수 있습니다.
MU이 너무 짧

하지만 메소드를 'this'에 넣으면 더 이상 정적 인 것이 아니 겠죠? 진정한 정적 메서드는 obj.prototype에 있어야합니다. Shawn Mclean의 예에서 다음과 같은 메서드를 호출 할 수 있습니다. Box2DUtility :: drawWorld (w, c);
Sergei Panfilov 2014.10.08

1
@SergeyPanfilov :하지만 프로토 타입의 모든 것은를 통해서도 사용할 수 있습니다. thisJavaScript가 작동하는 방식이므로 이에 대해 아무것도 할 수 없습니다. 실제로 클래스도없고 객체, 프로토 타입 및 생성자 함수 만 있으므로 용어가 훨씬 더 혼동됩니다. 생성자 함수의 속성으로 함수를 연결하는 것은 (여기서 일어나는 일입니다) 우리가 가지고있는 클래스 메소드와 가장 가깝습니다. JavaScript Box2DUtility::drawWorld 가 작동하지 않는지 확인하십시오 .
MU이 너무 짧

1
@ AlvaroLourenço CoffeeScript 클래스가 "정적 블록"인 것 같습니다 (몇 가지 추가 항목 포함) : jsfiddle.net/ambiguous/ap72ckax
mu가 너무 짧습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.