| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: для новичков > Расширение родительских методов |
| Автор: Alexanderrr9 26.10.2019, 17:04 |
| function Animal(name) { var foodAmount = 50; function formatFoodAmount() { return foodAmount + ' гр.'; } this.dailyNorm = function(amount) { if (!arguments.length) return formatFoodAmount(); if (amount < 50 || amount > 500) { return 'Недопустимое количество корма.'; } foodAmount = amount; }; this.name = name; this.feed = function() { console.log('Насыпаем в миску ' + this.dailyNorm() + ' корма.'); console.log('Кот доволен ^_^'); }; } function Cat(name) { Animal.apply(this, arguments); var animalFeed = this.feed; this.feed = function() { animalFeed(); //this.run(); } } var barsik = new Cat('Барсик'); console.log(barsik.name); console.log(barsik.dailyNorm(250)); console.log(barsik.feed()); console.log(barsik.dailyNorm(600)); console.log(barsik.feed()); console.log(barsik.dailyNorm(250)); console.log(barsik.feed()); barsik = null; Добрый день. Что то надо поменять в родительском классе, не могу понять что. |
| Автор: Alexanderrr9 26.10.2019, 18:47 |
| Дело в том когда код доходит до animalFeed() далее переходит в feed и там в this.dalyNorm происходит ошибка |
| Автор: ksnk 27.10.2019, 11:17 | ||
Где сказано, что Cat - это Animal ? В JS это делается явным присваиванием цепочки наследования.
Потом непонятно что-же должен возвращать метод dailyNorm, в случае, если все условия сработали и новое значение было применено. сейчас в этом случае возвращается null со всеми вытекающими последствиями Ну и функции и наследование в JS это довольно странные вещи... При вызове функций нужно явно указывать от какого объекта они вызываются, иначе внутри функции можно получить не ожидаемое значение this, а какой то непонятный window вместо него... |
| Автор: Alexanderrr9 4.11.2019, 21:24 |
| Проблема была решена с помощью создания переменной show = this в родителе и присвоением show.dailyNorm. |
| Автор: ksnk 5.11.2019, 11:33 |
| И тестирование проходит ? Попробуй завести десяток котов с разными нормами питания... |