[javascript] ES6-클래스 내에서 정적 메서드 호출

정적 메서드에 대한 내부 호출을 수행하는이 클래스가 있습니다.

export class GeneralHelper extends BaseHelper{
     static is(env){
          return config.get('env:name') === env;
     }

     static isProd(){
         return GeneralHelper.is('prod');
     }
 }

아래 줄에서 클래스 이름을 대체하는 데 사용할 수있는 키워드가 있습니까?

GeneralHelper.is('prod');

PHP에서가 self, static합니까 ES6는 다음과 비슷한 아무것도 제공 등?

TY.



답변

인스턴스 내부에서 정적 함수를 호출하는 경우 클래스 정적 함수를 참조하는 올바른 방법은 다음과 같습니다.

this.constructor.functionName();

es6 호출 정적 메서드


답변

일반 객체에서 메서드를 호출하는 것과 같습니다 . GeneralHelper.isProd()메서드 를 호출하면 메서드에서와 GeneralHelper같이 사용할 수 있으므로 사용할 this수 있습니다.

class GeneralHelper {
     static is(env) { … }
     static isProd(){
         return this.is('prod');
     }
}

그러나 평소처럼 메서드가 콜백 함수로 전달되면 작동하지 않습니다 . 또한, 접근 다를 수 있습니다 GeneralHelper명시 적으로 사람이 상속을 isProd클래스 및 덮어 쓰기에서 is, InheritedHelper.isProd()다른 결과를 생성합니다.

인스턴스 메서드에서 정적 메서드를 호출하려는 경우 여기를 참조 하십시오 . 또한 정적 메서드 만 정의하는 클래스는 이상한 것이므로 대신 일반 객체를 사용하는 것이 좋습니다.


답변

여기에있는 두 답변 모두 정확하고 훌륭하지만이 질문 제목을 기반으로 세부 사항을 추가하고 싶었습니다.

“ES6-클래스 내에서 정적 메서드 호출”을 보았을 때 “클래스 내에서 정적 메서드 (비 정적 메서드에서) 호출”처럼 들렸습니다. 질문자가 세부 사항에서 묻는 초기 질문이 무엇인지 정의하십시오.

그러나 클래스 내의 비 정적 메서드에서 정적 메서드를 호출하는 방법을 알고 싶은 사람은 다음과 같이 할 수 있습니다.

class MyClass {
    myNonStaticMethod () {
        console.log("I'm not static.")
        MyClass.myStaticMethod()
    }

    static myStaticMethod () {
        console.log("hey, I'm static!")
    }
}

MyClass.myStaticMethod() // will log "hey, I'm static!"

const me = new MyClass()

me.myNonStaticMethod() // will log "I'm not static" and then "hey, I'm static!"

아이디어는 클래스의 새 인스턴스를 만들지 않고도 정적 메서드를 호출 할 수 있다는 것입니다. 즉, 인스턴스 외부에서 호출하는 것과 동일한 방식으로 인스턴스의 메서드 내부에서 호출 할 수 있습니다.

다시 말하지만, 질문의 세부 사항이 요청한 것이 아니라 다른 사람들에게 도움이 될 수 있다는 것을 알고 있습니다.


답변