Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расширение родительских методов 
:(
    Опции темы
Alexanderrr9
Дата 26.10.2019, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.10.2019

Репутация: нет
Всего: нет



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  Если кто знает буду признателен за помощь. 


PM MAIL   Вверх
Alexanderrr9
Дата 26.10.2019, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.10.2019

Репутация: нет
Всего: нет



Дело в том когда код доходит до animalFeed() далее переходит в feed и там в this.dalyNorm происходит ошибка
PM MAIL   Вверх
ksnk
Дата 27.10.2019, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



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

Cat.prototype = new Animal();


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

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



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Alexanderrr9
Дата 4.11.2019, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.10.2019

Репутация: нет
Всего: нет



Проблема была решена с помощью создания переменной show = this в родителе и присвоением show.dailyNorm.
PM MAIL   Вверх
ksnk
Дата 5.11.2019, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



И тестирование проходит ? Попробуй завести десяток котов с разными нормами питания...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1268 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.