Изменить метод наследника в родительском классе
Здравствуйте. Нужно переписать родительский базовый класс, чтобы выполнялись следующие условия:
class BaseClass { // ... ваш код } class MyClass extends BaseClass { result(a, b) { this.a = a; this.b = b; return 100 - this.a + this.b; } } let m = new MyClass(); m.result(10, 20) === 90; m.result(20, 10) === 110; В дочернем методе надо поменять местами a и b, но как это сделать из родителского класса непонятно. |
В родительском конструкторе переопределить можно:
class BaseClass { constructor(a, b) { this.result = (a, b) => { this.a = b; this.b = a; return 100 - this.a + this.b; } } } class MyClass extends BaseClass { result(a, b) { this.a = a; this.b = b; return 100 - this.a + this.b; } } let m = new MyClass(); console.log(m.result(10, 20) === 90); console.log(m.result(20, 10) === 110); Получается, что если имена методов совпадают, старый новым перезаписать нельзя. |
Sigizmund2012, на самом деле можно, фишка в том что "методы класса" на самом деле методы лежащие в прототипе.
Задавая же "метод" в конструкторе вы на самом деле добавляете его самому получаемому объекту. При вызове метода в первую очередь он ищется именно в объекте, а потом уже смотрит в цепочке прототипов. Ну и смена из родительского класса методов ребёнка это полнейшая ересь. А так ещё вариант - прописать на a и b сеттеры и геттеры, чтоб выдавали значения друг друга.) |
Часовой пояс GMT +3, время: 09:32. |