Xem ví dụ thừa kế từ sân chơi trên trang web nguyên cảo:nguyên cảo truy cập thành viên của lớp cơ sở
class Animal {
public name;
constructor(name) {
this.name = name;
}
move(meters) {
alert(this.name + " moved " + meters + "m.");
}
}
class Snake extends Animal {
constructor(name) { super(name); }
move() {
alert("Slithering...");
super.move(5);
}
}
class Horse extends Animal {
constructor(name) { super(name); }
move() {
alert(super.name + " is Galloping...");
super.move(45);
}
}
var sam = new Snake("Sammy the Python")
var tom: Animal = new Horse("Tommy the Palomino")
sam.move()
tom.move(34)
tôi có thay đổi một dòng mã: cảnh báo trong Horse.move(). Ở đó tôi muốn truy cập "super.name", nhưng nó chỉ trả về không xác định. Intellisense gợi ý rằng tôi có thể sử dụng nó và TypeScript biên dịch tốt, nhưng nó không hoạt động. Bất kỳ ý tưởng nào?
Câu trả lời hay và cảm ơn tham chiếu đến đặc tả ngôn ngữ. Bạn có biết bất kỳ tài liệu nào về lý do tại sao, ví dụ, các trình truy cập thuộc tính lớp cơ sở không được ảo hóa và có thể truy cập thông qua các trình truy cập ghi đè trong lớp dẫn xuất (như các phương thức) không? –
Phần 4.8 bao gồm tất cả mọi thứ đã được viết xuống cho đến nay - nó có xu hướng là một "đây là hành vi", mặc dù chứ không phải là "đây là lý do tại sao". – Fenton
Cảm ơn Steve Fenton. Tôi cũng chỉ tình cờ gặp một cuộc thảo luận tương tự ở đây: https://typescript.codeplex.com/discussions/418349. Dường như là sự mất cân bằng trong ngôn ngữ; tôi đoán là quyết định đã được thực hiện để giữ JavaScript được phát ra đơn giản, trái ngược với các phương thức trợ giúp "work-around" để bù đắp cho việc thiếu sự hỗ trợ JavaScript. –