Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (3)

Лучшие ответы пользователя

Все ответы (2)
  • Как решить проблему при создании прототипа объекта?

    @ukbpyh
    console.log(romanInfantry.greet())
    /* Caesar Infantry ready!
    (index):53 undefined */
    // должна выдавать строку

    Вам и выдаёт строку:
    Caesar Infantry ready! 9:13
    а далее функция romanInfantry.greet() возвращает undefined,
    undefined 22:13
    т.к. в ней у вас не указано возвращаемое значение (return ...)
    Чтобы этой строки (undefined) не было можете просто написать: romanInfantry.greet().

    console.log(romanInfantry) // constructor {type: "infantry", name: "Caesar Infantry", force: 15}
    // должна выдавать объект romanInfantry

    Вам этот объект и выдаёт, просто этот объект, видимо, представляет из себя не то, что вы ожидаете.

    Кстати, обращаю ваше внимание, что в строке
    let romanInfantry = Object.create(Unit).constructor('infantry','Caesar Infantry', 15,[1,5,67]);

    Вы используете 4 аргумента, тогда как в методе объекта-прототипа Unit у вас только 3.
    То, что вы создали собственный метод constructor в Infanity,
    Infantry.constructor = function(type,name,force,infrantryPosibilities) {
    Unit.constructor.apply(this,arguments);
    this.infrantryPosibilities = infrantryPosibilities || [];
    return this;
    не изменило оригинальный объект Unit.

    Рекомендую вам также провести полную ревизию всего кода, так как выбранный вами способ создания прототипов крайне сомнителен. Должно быть примерно так (если не использовать синтаксис объявлений классов):
    // создаёте конструктор класса Unit
    function Unit(type,name,force) {
        this.type = type;
        this.name = name;
        this.force = force;
    }
    
    // создаёте наследуемые свойства/методы Unit
    Unit.prototype = {
        constructor: Unit,
        greet: function() {
            console.log(this.name[0].toUpperCase() + this.name.slice(1) + " ready!")
        }
    };
        
    // создаёте конструктор класса Infantry
    function Infantry(type,name,force,infrantryPosibilities) {
        Unit.call(this,type,name,force);
        this.infrantryPosibilities = infrantryPosibilities || [];
    }
    
    // наследуете Infantry класс Unit и замещаете родительское свойство constructor, на новое
    Infantry.prototype = Object.create(Unit.prototype, {
        constructor: {
            value: Infantry,
            enumerable: true,
            writable: true,
            configurable: true
        }
    });
    
    // создаёте новый экземпляр класса Infantry, наследника Unit.
    let romanInfantry = new Infantry('infantry','Caesar Infantry', 15,[1,5,67]);
    
    romanInfantry.greet();
    console.log(romanInfantry);
    Ответ написан
    Комментировать