Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.08.2018, 13:25
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 267

Изменить метод наследника в родительском классе
Здравствуйте. Нужно переписать родительский базовый класс, чтобы выполнялись следующие условия:
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, но как это сделать из родителского класса непонятно.

Последний раз редактировалось Sigizmund2012, 25.08.2018 в 16:33.
Ответить с цитированием
  #2 (permalink)  
Старый 25.08.2018, 16:32
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 267

В родительском конструкторе переопределить можно:
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);


Получается, что если имена методов совпадают, старый новым перезаписать нельзя.
Ответить с цитированием
  #3 (permalink)  
Старый 25.08.2018, 22:31
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Sigizmund2012, на самом деле можно, фишка в том что "методы класса" на самом деле методы лежащие в прототипе.
Задавая же "метод" в конструкторе вы на самом деле добавляете его самому получаемому объекту.
При вызове метода в первую очередь он ищется именно в объекте, а потом уже смотрит в цепочке прототипов.

Ну и смена из родительского класса методов ребёнка это полнейшая ересь. А так ещё вариант - прописать на a и b сеттеры и геттеры, чтоб выдавали значения друг друга.)
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск