Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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;



Добрый день. Что то надо поменять в родительском классе, не могу понять что. smile  Если кто знает буду признателен за помощь. 


Автор: Alexanderrr9 26.10.2019, 18:47
Дело в том когда код доходит до animalFeed() далее переходит в feed и там в this.dalyNorm происходит ошибка

Автор: ksnk 27.10.2019, 11:17
Где сказано, что Cat - это Animal ? В JS это делается явным присваиванием цепочки наследования.
  
Код

Cat.prototype = new Animal();


Потом непонятно что-же должен возвращать метод dailyNorm, в случае, если все условия сработали и новое значение было применено. сейчас в этом случае возвращается null со всеми вытекающими последствиями

Ну и функции и наследование в JS это довольно странные вещи... При вызове функций нужно явно указывать от какого объекта они вызываются, иначе внутри функции можно получить не ожидаемое значение this, а какой то непонятный window вместо него...

Автор: Alexanderrr9 4.11.2019, 21:24
Проблема была решена с помощью создания переменной show = this в родителе и присвоением show.dailyNorm.

Автор: ksnk 5.11.2019, 11:33
И тестирование проходит ? Попробуй завести десяток котов с разными нормами питания...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)