2017-02-21 2 views
0

저는 약간의 (아주 오래된) 코드를 조금 더 현대적이고 리팩토링하는 것으로 새롭게 바뀌 었습니다. 그리고 이런 식으로 끝났습니다.자바 스크립트 멤버 함수 내부에서 멤버 함수 호출하기

var MyClass = function(parms} {/*stuff*/} 
MyClass.prototype = { 
    this_func(p1, p2) { /* do this */ }, 
    that_func(args) { /* do that */ } 
}; 

참고 ES6 class 키워드를 사용할 수 없지만 사용 가능한 상태가되면 바로 사용하겠습니다. 내가 that_func 내부에서 this_func 전화를 원하고 나는이 비틀기

that_func(args) { 
    //this.this_func(parm1, parm2) causes an error 
    myClass.prototype.this_func.call(this, parm1, parm2); 
} 

이 일을 더 쉬운 방법이 있나요와 끝까지 관리해야 할 때

문제는 온다? 그리고 내가 충분히 es6을 얻을 때 나는 단지 this.this_func를 사용할 수있을 것입니까?

이 사이트에있는 기존 질문에서 검토 한 결과 그들 중 누구도 정말 내가 뭘 (또는 적어도 방법으로 나는 내 문제에 매핑 할 수 있습니다)

해명 무엇을 다루 보이지 않는다 - 클래스는이

var myInstance = new MyClass(); 
myInstance.that_func('xxx'); 

처럼 사용하고, 나는

+1

지금 당장'this.this_func'을 사용할 수 있어야합니다. 그것이 작동해야하는 방법입니다. –

+0

그러나 프로토 타입 함수가 잘못되었다고 생각합니다. 실제 코드를 보여줄 수 있습니까? –

+0

brendan이 소년 이었기 때문에 그것이 작동하는 방법입니다. –

답변

0
(I 때문에 지금 문제가되는 코드에서 먼 길 것에, 순간에 호출 할 수없는) 알려진되지 this_func에 대한 오류를 얻을 수

this은 전류를 나타냅니다. 예. 클래스가 new MyClass(...)으로 올바르게 인스턴스화 된 경우 프로토 타입 체인이 자동으로 설정됩니다. 이는 prototype 개체의 목적입니다. 당신이 '는 ES6 클래스 키워드를 사용할 수없는'경우

그것은

MyClass.prototype = { 
    this_func(p1, p2) {...}, 
    that_func(args) { 
     this.this_func(...); 
    } 
}; 

을해야한다, 바벨 ES5에 ES6 코드를 transpile하는 데 사용할 수 있습니다. 이것이 바로 그 때문입니다.

+0

예, 오류가 발생합니다. 이것이 내가 게시 한 이유입니다. 질문 –

+0

아니요, [하지 않습니다] (https://jsfiddle.net/dbkjeetL/). – estus

0

글쎄, 추적 및 로깅을 많이 추가 한 후에 발견했습니다. 오늘 나는 다른 함수 안에 함수가있는 경우 this 값이 내부 함수 내부에서 변경되므로 어떤 의미에서는 '클래스'인스턴스에 속하지 않는다는 것을 알았습니다 (C++ 배경에서 오는 경우 혼란스러워 함).

관련 문제