2017-12-06 1 views
0

예제가 내 질문을 잘 설명해줍니다.굵은 화살표로 된이 문맥

let obj = { 
    columns: [ 
     { column: name }, 
     { column: name }, 
     { column: name }, 
     { column: name }, 
     { column: name } 
    ], 
    someFunc:() => { 
     this.somePublicFunc(this.columns[0]) 
    } 
} 

regular function()을 사용하면 this.columns가 obj.columns를 가리 킵니다. 거기에 뚱뚱한 화살표 함수 내 에서이 범위에 액세스하는 방법이 있나요?

다른 방법으로 비 - 축 화살표 함수에서 공용 함수를 호출 할 수 있습니까?

someFunc: function() { 
     this.somePublicFunc(this.columns[0]) 
    } 

편집 :이 실제 코드에 대한 가장 우아한 옵션 아니므로 내가 obj.columns에 액세스 할 수 있습니다 알고 있지만, 다른 옵션을 찾고 있었다.

편집 : 이것은 모든 공개 메소드를 화살표 기능으로 빠르게 변경 한 결과입니다. 그 생각은 문제의 방법을 전통적인 뚱뚱한 화살 기능으로 바꾸기 위해 나에게 일어난 적이 결코 없습니다. 문제는 해결되고, 자존심은 타박상을 나타낸다.

+1

'바닐라 자바 ​​스크립트에서 this.columns는 obj.columns를 가리 킵니다. 아니, 그렇지 않습니다. Typescript 화살표 함수는 Javascript 화살표 함수와 동일하게 작동합니다. – SLaks

+0

''나는 비구름 화살표 함수로 public 함수를 호출 할 수 있습니까? '물론. 왜 그게 효과가 없을까요? – SLaks

+0

SLaks가 맞습니다. TypeScript는 JS의 위 첨자에 지나지 않습니다. JS를 하루 종일 TS로 쓸 수 있습니다. 유효한 JS는 유효한 TS입니다. – Muirik

답변

1

화살표 기능은 기능이 선언 된 시점에 현재 this에 따라 this의 기준을 결정하고 객체 내의 배치를 기반으로하지 않습니다. 이 전 세계적으로 실행한다고 가정 화살표 기능의 내부 this 포인터 있도록 기능 someFunc 선언 할 때 위의 코드에서

,의 this 포인터가 노드에 브라우저에서 windowglobal 될 것입니다.

일반적으로 전통적인 함수 선언을 사용하면 this이 다른 것으로 변경되지 않는 한 문제가 해결됩니다.

+0

전통적인 함수 선언을 사용하고 싶습니다. 즉 현재 코드가 어떻게되어 있는지를 알고 싶지만 public 함수에 액세스하는 방법을 모르겠습니다. –

+0

당신은 다음과 같이 객체를 통해이 객체에 접근합니다 :'obj.someFunc();' – Intervalia

+0

대답을 두려워하고 이것을 게시하기 전에 그 경로를 시작했습니다. 불행히도 실제 코드는 내 예제만큼 간단하지 않습니다. –