Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   проблема с наследованием (https://javascript.ru/forum/misc/60821-problema-s-nasledovaniem.html)

zlodiak 21.01.2016 21:15

проблема с наследованием
 
помогите пожалуйста разобраться с наследованием на следующем примере:

есть 2 конструктора: Game, Level. на их основе я создаю 2 объекта таким образом чтобы level наследовался от game:
var Game = function(parentGameElementTag) {
  this.parentGameElementTag = parentGameElementTag;
  this.gameElementId = 'game';
  this.levelObj = new Level();  

  this.init();
};

Game.prototype = {
  init: function() {  
    $('<div class="game" id="' + this.gameElementId + '"></div>').appendTo(this.parentGameElementTag);   
  }
 };
 
 var Level = function() { 
  var self = this;

  this.fieldElementId = 'field';  
  this.levelScreenDisplay('body');  
};

//Level.prototype = Game;
Level.prototype = Object.create(Game.prototype);

Level.prototype = {

  levelScreenDisplay: function(parentElementTag) {
    $('<div class="level_begin_label" id="levelBeginLabel">Уровень: ' + this.level + '</div>').appendTo(parentElementTag);   

    setTimeout(function() { 
      $('<div class="any_key_invitation" id="anyKeyInvitation">Нажмите любую клавишу для старта</div>').appendTo('#levelBeginLabel');

      document.onkeypress = function() {
        document.onkeypress = undefined;
        $('#levelBeginLabel').remove();
      };          
    }, 1000);
  }
};
 
var	app = new Game('body');


в результате на странице должен выводиться номер уровня. которого нет в level, но который есть в game. а благодаря наследованию он должен найтись. но не находится. в чём я ошибаюсь?

рони 21.01.2016 21:57

zlodiak,
:-?
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
var Game = function(parentGameElementTag) {
  this.parentGameElementTag = parentGameElementTag;
  this.gameElementId = 'game';
  this.level = 0;
  this.init();
};

Game.prototype.init = function() {
    $('<div class="game" id="' + this.gameElementId + '">Game</div>').appendTo(this.parentGameElementTag);

 };
Game.prototype.gameOver = function() {
    $('<div class="game" >Game over!!!</div>').appendTo(this.parentGameElementTag);

 };
 var Level = function() {
  Game.apply(this, arguments);
  this.fieldElementId = 'field';
  this.levelScreenDisplay();
};


Level.prototype = Object.create(Game.prototype);
Level.prototype.constructor = Level;
Level.prototype.levelScreenDisplay = function() {
     var self = this;
    $('<div class="level_begin_label" id="levelBeginLabel">Уровень: ' + this.level + '</div>').appendTo(this.parentGameElementTag);

    setTimeout(function() {
      $('<div class="any_key_invitation" id="anyKeyInvitation">Нажмите любую клавишу для старта</div>').appendTo('#levelBeginLabel');

      $(document).one('keypress', function() {
        $('#levelBeginLabel').remove();
        self.level++;
        if (self.level == 3) self.gameOver();
        else self.levelScreenDisplay();
      });
    }, 1000);
  }
Level.prototype.levelScreenDisplay

var	app = new Level('body');


</script>
</body>

</html>

zlodiak 22.01.2016 11:05

спасибо, помогло


Часовой пояс GMT +3, время: 08:10.