반응형
ECMA스크립트 6에는 추상 클래스에 대한 규약이 있습니까?
ES6에서 읽었을 때 추상 클래스에 대해 아무것도 찾을 수 없다는 것에 놀랐습니다. ("추상 클래스"라는 것은 추상 클래스가 인스턴스화되기 위해 구현해야 하는 메서드 시그니처를 선언하는 자바 의미를 말하는 것입니다.)
ES6에서 추상 클래스를 구현하기 위해 사용된 협약을 아는 사람이 있습니까?정적 분석으로 추상적인 수업 위반을 잡을 수 있다면 좋을 것 같습니다.
실행 시 오류를 발생시켜 추상 클래스 인스턴스화 시도를 알리는 경우 오류는 무엇입니까?
ES2015에는 원하는 디자인 패턴에 맞는 어포던스가 내장된 Java 스타일 클래스가 없습니다.그러나 수행하려는 작업에 따라 유용할 수 있는 몇 가지 옵션이 있습니다.
구성할 수 없지만 하위 클래스가 가능한 클래스를 원하는 경우 다음을 사용할 수 있습니다.new.target
:
class Abstract {
constructor() {
if (new.target === Abstract) {
throw new TypeError("Cannot construct Abstract instances directly");
}
}
}
class Derived extends Abstract {
constructor() {
super();
// more Derived-specific stuff here, maybe
}
}
const a = new Abstract(); // new.target is Abstract, so it throws
const b = new Derived(); // new.target is Derived, so no error
에 대한 자세한 내용은 ES2015의 클래스가 작동하는 방식에 대한 일반적인 개요를 참조하십시오. http://www.2ality.com/2015/02/es6-classes-final.html
특정 메소드를 구현해야 하는 경우 슈퍼클래스 생성자에서도 이를 확인할 수 있습니다.
class Abstract {
constructor() {
if (this.method === undefined) {
// or maybe test typeof this.method === "function"
throw new TypeError("Must override method");
}
}
}
class Derived1 extends Abstract {}
class Derived2 extends Abstract {
method() {}
}
const a = new Abstract(); // this.method is undefined; error
const b = new Derived1(); // this.method is undefined; error
const c = new Derived2(); // this.method is Derived2.prototype.method; no error
언급URL : https://stackoverflow.com/questions/29480569/does-ecmascript-6-have-a-convention-for-abstract-classes
반응형
'programing' 카테고리의 다른 글
C에서의 유니온의 예 (0) | 2023.08.04 |
---|---|
URL 매개 변수 값 가져오기 (0) | 2023.08.04 |
mysqdump: 쓰기에서 오류 32를 받았습니다. (0) | 2023.08.04 |
사용자 지정 유형을 최대 절전 모드로 설정하여 '원인: java.sql'을(를) 방지합니다.SQL 예외:스트림이 이미 닫혔습니다.' (0) | 2023.08.04 |
Oracle에서 기본 키를 재사용할 수 있도록 이름을 변경하는 방법 (0) | 2023.08.04 |