반응형
ECMAScript 6에는 추상 클래스에 대한 규칙이 있습니까? [복제]
이 질문에는 이미 답변이 있습니다.
ES6을 읽을 때 추상 클래스에 대해 아무것도 찾을 수 없다는 것에 놀랐습니다. ( "abstract class"에 의해 추상 클래스가 서브 클래스가 인스턴스화하기 위해 구현해야하는 메소드 서명을 선언하는 Java의 의미에 대해 이야기하고 있습니다).
누구든지 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
에 대한 자세한 내용 new.target
은 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
반응형
'IT' 카테고리의 다른 글
Rails에서 무언가를 독립적 인 로그 파일로 기록하는 방법은 무엇입니까? (0) | 2020.06.15 |
---|---|
Chrome 확장 프로그램 : 콘텐츠 스크립트에서 localStorage에 액세스 (0) | 2020.06.15 |
마우스 "클릭"과 "끌기"를 구별하는 방법 (0) | 2020.06.15 |
정확히 Activity.finish () 메소드가 수행하는 작업은 무엇입니까? (0) | 2020.06.15 |
코 틀린에서의 관용적 로깅 방법 (0) | 2020.06.15 |