Я пытаюсь переопределить метод объекта, определенного в JavaScript (ES5)-функции класса:Переопределение методов из функций на основе JavaScript классов в машинописном
var JSClass = function() {
this.start = function() {
console.log('JSClass.start()');
}
}
затем вызвать метод start()
отпечатки, как и ожидалось:
let o1 = new JSClass();
o1.start();
// prints: JSClass.start()
Однако, если я пытаюсь расширить этот объект с классом машинопись, такие как:
class TSClass extends JSClass {
start() {
super.start();
console.log('TSClass.start()');
}
otherStart() {
this.start();
console.log('TSClass.otherStart()');
}
}
... тогда TSClass::start()
никогда не называется. Только start()
определяется в JSClass
.
let o2 = new TSClass();
o2.start();
o2.otherStart();
Это печатает только:
JSClass.start()
JSClass.start()
TSClass.otherStart()
я ожидал бы напечатать:
// by calling: o2.start();
JSClass.start()
TSClass.start()
// by calling: o2.otherStart();
JSClass.start()
TSClass.start()
TSClass.otherStart()
Является ли это дизайн? Тогда как я могу расширить методы объекта ES5 с помощью TypeScript?
Смотреть демо: https://jsfiddle.net/martinsikora/2sunkmq7/
Edit: Я в конечном итоге с помощью этого.
class TSClass extends JSClass {
constructor() {
var oldStart = this.start;
this.start =() => {
oldStart.call(this);
console.log('TSClass.start()');
}
}
// ...
}
Теперь он работает должным образом.
Вы правы, я не думал об этом. К сожалению, я расширяю стороннюю библиотеку, которая использует только методы свойств, но в конце я просто хотел в своем редактировании. – martin