Javascript 为什么不增加对象变量?

Javascript 为什么不增加对象变量?,javascript,Javascript,请帮忙解决这个问题 我为有几个关卡的游戏上课 var Game = function() { self = this; this.myMove = false; this.level = 1; this.Start(); }; Game.prototype = { Start: function() { this.levelInfo(); $(document).keypress(function(){ self.level++;

请帮忙解决这个问题

我为有几个关卡的游戏上课

var Game = function() {
  self = this;

  this.myMove = false;
  this.level = 1;

  this.Start();
};

Game.prototype = {

  Start: function() {
    this.levelInfo();

    $(document).keypress(function(){
      self.level++;
      // game body
      self.Start();
    });
  },     

  levelInfo: function() {
    this.clearScreen();
    this.levelDisplay();    
  },        

  levelDisplay: function() {  
    $('<div class="level_label" id="levelLabel">Level: </div> \
      <div class="level_value" id="levelValue">' + self.level + '</div>').appendTo('#game');
  },  

  clearScreen: function() {
    $('#game').html('');
  } 

};
var Game=function(){
self=这个;
this.myMove=false;
这1.1级=1;
这个。Start();
};
Game.prototype={
开始:函数(){
这是levelInfo();
$(文档).keypress(函数(){
self.level++;
//游戏主体
self.Start();
});
},     
levelInfo:function(){
这个;
这个.levelDisplay();
},        
levelDisplay:函数(){
$('级别:\
“+self.level+”)。附加到(“#游戏”);
},  
清除屏幕:函数(){
$('#game').html('');
} 
};
但在运行游戏并按下屏幕上的任何键后,输出下一级序列:

1、2、4、16、32等等

但我需要遵循以下顺序:

1、2、3、4、5等


fiddle:

您已经在Start中定义了按键处理程序,它将继续创建新的按键事件。请尝试以下方法:

var Game = function() {
  self = this;

  this.myMove = false;
  this.level = 1;

  $(document).keypress(function(){
      self.level++;
      // game body
      self.Start();
  });

  this.Start();
};

Game.prototype = {

  Start: function() {
    this.levelInfo();
  },     

  levelInfo: function() {
    this.clearScreen();
    this.levelDisplay();    
  },        

  levelDisplay: function() {  
    $('<div class="level_label" id="levelLabel">Level: </div> \
      <div class="level_value" id="levelValue">' + self.level + '</div>').appendTo('#game');
  },  

  clearScreen: function() {
    $('#game').html('');
  } 

};
var Game=function(){
self=这个;
this.myMove=false;
这1.1级=1;
$(文档).keypress(函数(){
self.level++;
//游戏主体
self.Start();
});
这个。Start();
};
Game.prototype={
开始:函数(){
这是levelInfo();
},     
levelInfo:function(){
这个;
这个.levelDisplay();
},        
levelDisplay:函数(){
$('级别:\
“+self.level+”)。附加到(“#游戏”);
},  
清除屏幕:函数(){
$('#game').html('');
} 
};

您正在使用可变数据结构(
self.level++;
),并在每个
keypress
上添加新的
keypress
事件,这会导致O(n^2)性能以及这个奇怪的错误

首先,您应该摆脱对
Start

Start: function() {
    this.levelInfo();

    $(document).keypress(function(){
      self.level++;
      // game body
      this.levelInfo();
    }.bind(this));
}, 
正如您所见,这将解决您当前的问题

为了避免将来出现类似的问题,您可以查看一些不可变的数据结构,例如。

出于某种原因(您可能知道),您的
$(文档)。在游戏原型中定义的按键(function())
被调用了2^n次。(如console.log所示,当然还有level变量的增长)。不过,我不知道为什么称之为额外时间。