어떤 종류의 상속을 계획하고 있다면 권장 this.constructor
합니다. 이 간단한 예는 이유를 설명해야합니다.
class ConstructorSuper {
constructor(n){
this.n = n;
}
static print(n){
console.log(this.name, n);
}
callPrint(){
this.constructor.print(this.n);
}
}
class ConstructorSub extends ConstructorSuper {
constructor(n){
this.n = n;
}
}
let test1 = new ConstructorSuper("Hello ConstructorSuper!");
console.log(test1.callPrint());
let test2 = new ConstructorSub("Hello ConstructorSub!");
console.log(test2.callPrint());
test1.callPrint()
ConstructorSuper Hello ConstructorSuper!
콘솔에 기록 합니다
test2.callPrint()
ConstructorSub Hello ConstructorSub!
콘솔에 기록 합니다
명명 된 클래스는 명명 된 클래스를 참조하는 모든 함수를 명시 적으로 재정의하지 않는 한 상속을 잘 처리하지 않습니다. 예를 들면 다음과 같습니다.
class NamedSuper {
constructor(n){
this.n = n;
}
static print(n){
console.log(NamedSuper.name, n);
}
callPrint(){
NamedSuper.print(this.n);
}
}
class NamedSub extends NamedSuper {
constructor(n){
this.n = n;
}
}
let test3 = new NamedSuper("Hello NamedSuper!");
console.log(test3.callPrint());
let test4 = new NamedSub("Hello NamedSub!");
console.log(test4.callPrint());
test3.callPrint()
NamedSuper Hello NamedSuper!
콘솔에 기록 합니다
test4.callPrint()
NamedSuper Hello NamedSub!
콘솔에 기록 합니다
Babel REPL에서 실행중인 위의 모든 내용을 참조하십시오 .
test4
여전히 슈퍼 클래스에 있다고 생각하는 것을 볼 수 있습니다 . 이 예에서는 별다른 문제가 아닌 것 같지만 재정의 된 멤버 함수 나 새 멤버 변수를 참조하려고하면 문제가 생길 수 있습니다.
SomeObject.print
자연 스럽습니다. 그러나this.n
정적 메소드에 대해 이야기하는 경우 인스턴스가 없기 때문에 내부는 의미가 없습니다.