Nếu bạn muốn có một lớp siêu để gọi một chức năng từ một lớp con, cách sạch nhất là xác định một mô hình trừu tượng, theo cách này bạn một cách rõ ràng biết phương pháp này tồn tại ở đâu đó và phải được ghi đè bởi một phân lớp.
Đây là là một ví dụ, thông thường bạn không gọi một phương thức phụ trong các nhà xây dựng như trường hợp phụ không được khởi tạo chưa ... (lý do tại sao bạn có một "không xác định" trong ví dụ của câu hỏi của bạn)
abstract class A {
// The abstract method the subclass will have to call
protected abstract doStuff():void;
constructor(){
alert("Super class A constructed, calling now 'doStuff'")
this.doStuff();
}
}
class B extends A{
// Define here the abstract method
protected doStuff()
{
alert("Submethod called");
}
}
var b = new B();
Thử nghiệm nó Here
Và nếu như @Max bạn thực sự muốn tránh triển khai phương pháp trừu tượng ở khắp mọi nơi, chỉ cần loại bỏ nó. Tôi không khuyên bạn nên tiếp cận này bởi vì bạn có thể quên bạn đang ghi đè phương pháp.
abstract class A {
constructor() {
alert("Super class A constructed, calling now 'doStuff'")
this.doStuff();
}
// The fallback method the subclass will call if not overridden
protected doStuff(): void {
alert("Default doStuff");
};
}
class B extends A {
// Override doStuff()
protected doStuff() {
alert("Submethod called");
}
}
class C extends A {
// No doStuff() overriding, fallback on A.doStuff()
}
var b = new B();
var c = new C();
Thử Here
Nguồn
2017-06-30 14:44:17
gọi method ảo trong constructor được coi là một thực tế xấu trong bất kỳ ngôn ngữ OOP: https://google.com/search?q=virtual+method+in+constructor –