정적 메서드에 대한 내부 호출을 수행하는이 클래스가 있습니다.
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();
답변
일반 객체에서 메서드를 호출하는 것과 같습니다 . 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!"
아이디어는 클래스의 새 인스턴스를 만들지 않고도 정적 메서드를 호출 할 수 있다는 것입니다. 즉, 인스턴스 외부에서 호출하는 것과 동일한 방식으로 인스턴스의 메서드 내부에서 호출 할 수 있습니다.
다시 말하지만, 질문의 세부 사항이 요청한 것이 아니라 다른 사람들에게 도움이 될 수 있다는 것을 알고 있습니다.