Статистика не определена - PullRequest
0 голосов
/ 24 мая 2019

Не могу понять, почему я получаю ошибку, что статистика не определяется, когда она ...

Я попытался назвать и переименовать и вызвать ранее названную функцию, все еще получая ошибку

    function GameObject(GO){     
    this.createdAt = GO.createdAt;     
    this.name = GO.name;    
    this.dimensions = GO.dimensions;    
   }

    GameObject.prototype.destroy = function(){    
    return `${this.name} was removed from the game.`;    
   }

    function CharacterStats(stats){    
    GameObject.call(stats);    
    this.healthPoints= stats.healthPoints    
   }

    CharacterStats.prototype = Object.create(GameObject.prototype)

    CharacterStats.prototype = takeDamage = function(){
    return `${this.name} took damage`;
   }
    function Humanoid(PettyHumans){
     this.team = PettyHumans.team;
     this.weapons = PettyHumans.weapons;
     this.language = PettyHumans.language;
     CharacterStats.call(this.PettyHumans)
    }

    Humanoid.prototype.greet = function(){
     return `${this.name} offers a greeting in ${this.language}.`;
    }

1 Ответ

0 голосов
/ 24 мая 2019

Этот код передает undefined в CharacterStats:

function Humanoid(PettyHumans){
 this.team = PettyHumans.team;
 this.weapons = PettyHumans.weapons;
 this.language = PettyHumans.language;
 CharacterStats.call(this.PettyHumans)
 //                  ^^^^-------------- The problem is here
}

Предполагая, что вы вызываете Humanoid через new Humanoid, вы нигде не устанавливали это свойство.PettyHumans это параметр, а не свойство.Либо установите его в качестве свойства, либо удалите this. из этой строки.


Примечание: в нескольких местах кажется, что вы пытаетесь реализовать классовое наследование (например,между CharacterStats и GameObject), но код, который делает это, не является вполне правильным.См. этот ответ (который я также написал), чтобы узнать, как это исправить, продолжая использовать синтаксис ES5 или используя синтаксис ES2015 + class.Но вкратце, минимальное изменение, чтобы исправить это, это добавить строку:

GameObject.call(stats);    
    this.healthPoints = stats.healthPoints    
}

CharacterStats.prototype = Object.create(GameObject.prototype)
CharacterStats.prototype.constructor = CharacterStats  // Add this (and similar when doing other inheritance)

Или, опять же, использовать class.(Вы можете выполнить перенос, если вам нужно поддерживать только движки JavaScript ES5.)

...