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变量的增长)。不过,我不知道为什么称之为额外时间。