Расширение родительских методов [ошибка с this при вызове метода родительского класса]

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;

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

Дело в том когда код доходит до animalFeed() далее переходит в feed и там в this.dalyNorm происходит ошибка

Собака порылась в этой строке

animalFeed();

должно быть

animalFeed.apply(this, arguments)

Картинка в общем виде такая: если взять любую переменную, содержащую ссылку на на функцию. Ниже переменная f для примера и как в нее может попасть ссылка на функцию

function f() {}
var f = function () {}
var f = window.someFunctionName
var f = this.someFunctionName

и вызывать эту функцию f, то this при вызове функции всегда будет window (за исключением тех функций для которых this был зафиксирован с помощью метода .bind).

В твоем коде this при вызве animalFeed не ссылался на инстанс класса Cat.


Думаю у тебя появится еще вопрос почему не работает dailyNorm. Оформи отдельным вопросом, пожалуйста.

Решение было найдено таким способом, show = this в родитель и show.dailyNorm.