2013-06-19 2 views
0

CoffeeScript에서 @를 사용하는 것과 혼동 스럽습니다. 나는이 일 것으로 예상하지만 그렇지 않습니다 - 반면에CoffeeScript 클래스 - @ and this

obj=new class 
@x:5 
getX:->return @x 

alert obj.getX() # undefined 

을 우리가 @x:5에서 @, 그때 어떻게 든 작동 제거하는 경우 -

obj=new class 
x:5 
getX:->return @x 

alert obj.getX() # 5 

내가 @x 생각이 비슷합니다 .x하지만 두 번째 경우에는 @x를 정의하지 않았습니다. 왜 작동합니까?

x:5 대신 @x:5을 언제 정의해야합니까?

답변

1

첫 번째 인스턴스에서는 "정적"x 및 "정적"이 아닌 getX을 정의합니다. 두 번째 인스턴스에서 멤버와 메서드는 정적이 아닙니다.

당신이 액세스 할 수있을 거라고, 당신이 당신의 클래스를 명명했다 첫 번째 버전의 xClassName.x로 : 당신은 일반적으로 단지 @을 사용한다

class TestClass 
@x: 5 
y: 6 

obj = new TestClass 

TestClass.x # 5 
obj.y # 6 

당신은 클래스 메소드 내부에있을 때; 클래스 선언 내에서 @이 참조하는 this은 클래스 자체로 생각할 수 있습니다.

+0

그래서 클래스 선언의'x'는 인스턴스 변수이지만 메소드에서 그것을 참조하려면'@x'를 사용해야합니다. 나는 약간 혼란 스럽다. – KalEl

+0

* 대부분의 * 언어가 작동하는 방식입니다. 'this'가 실제로 값을 가진 객체의 컨텍스트에서 평가되는 메소드에 실제로있을 때까지는'this'를 사용하지 마십시오. 메소드를 정의하기 위해'getX : -> '를 사용 하겠지만,'obj' 내에서는 * @getX()를 사용합니다. '@getX : -''...를 정의하려고하지 않겠습니까? – meagar

+0

인스턴스 변수도'this'로 연결하면 안됩니까? 만일 구문이'@y : 6'이라면'y'가'this'에 묶여 있기 때문에 이해하기가 더 쉬울 것입니다. – KalEl