如何分解此代码以减少重复(以及应该这样做)
How can this code be factored out to reduce duplication (and should it)?
我正在用javascript制作一个基本的基于浏览器的游戏。这是我对可玩角色的控制方法:
obj.update = function(){
if (this.keyPressed === 'right'){
this.x += 100;
}
if (this.keyPressed === 'left'){
this.x += -100;
}
if (this.keyPressed === 'up'){
this.y -= 100;
}
if (this.keyPressed === 'down'){
this.y -= -100;
}
// reset key press
this.keyPressed = null;
};
我意识到我在这里重复代码。我应该将重复的元素分解掉吗?如果是这样,最好的方法是什么?
应该是一个意见问题。回答罐头部分,我可能会使用switch
:
obj.update = function(){
switch (this.keyPressed) {
case 'right':
this.x += 100;
break;
case 'left':
this.x += -100;
break;
case 'up':
this.y -= 100;
break;
case 'down':
this.y -= -100;
break;
}
// reset key press
this.keyPressed = null;
};
。并且可能使100
成为常量(在 ES2015/ES6 中)或我没有更改的变量(在 ES5 及更早版本中)。
尽管使用对象(或在ES2015/ES6中为Map
)作为查找表也很诱人:
var table = {
right: {x: 100, y: 0},
left: {x: -100, y: 0},
up: {x: 0, y: -100},
down: {x: 0, y: 100}
};
obj.update = function(){
var entry = table[this.keyPressed];
if (entry) {
this.x += entry.x;
this.y += entry.y;
}
// reset key press
this.keyPressed = null;
};
你可以用一个switch
语句使它更具可读性:
switch (this.keyPressed) {
case 'right': this.x += 100; break;
case 'left' : this.x += -100; break;
case 'up' : this.y -= 100; break;
case 'down' : this.y -= -100; break;
}
this.keyPressed = null;
你可以创建一个对象并用this
调用它。
此解决方案的智能部分是开放的更多命令,例如保存状态或其他命令。
var op = {
right: function (t) { t.x += 100; },
left: function (t) { t.x -= 100; },
up: function (t) { t.y -= 100; },
down: function (t) { t.y += 100; }
};
obj.update = function () {
var f = op[this.keyPressed];
f && f(this);
this.keyPressed = null;
};
相关文章:
- 页面在我的javascript执行后重新加载,我不希望它这样做
- 如何在将鼠标悬停在提交/锚点上时检查复选框是否已选中,并显示提示用户这样做的警报
- JavaScript 如果数组包含名称,则不要这样做
- 我用脚本创建了一个按钮.我可以通过点击按钮调用其他函数吗?我这样做,但失败了
- Jquery语法;也这样做”;
- 如果我不这样做会发生什么;t在javascript中的变量中分配新的Image
- 如果他们不这样做,就从我的数组中删除东西't没有前缀
- 如何使用“;这个“;在javascript中?这样做的目的是什么
- 如果我不这样做会发生什么;t有页码吗?继续循环帖子..为什么需要分页,对于页脚
- 禁用 ALT+F4,是的,我知道不建议这样做
- 使用默认值定义构造函数.我这样做对吗?
- 我刚刚开始使用 MEAN 堆栈.我试图将我的表单提交数据存储到 mongo 数据库,但我无法这样做
- 为什么不这样做
- Node.JS/Javascript - 将字符串转换为整数正在返回 NaN,而我不希望它这样做
- 在angularjs中拥有$sce或严格上下文转义有什么好处,为什么反应不需要这样做
- 如何分解此代码以减少重复(以及应该这样做)
- 嵌套的 if/else 语句讨论了分配变量.我已经这样做了,但它仍然不起作用
- blur() 无法以编程方式工作 |但在从用户启动时会这样做
- Webkit 似乎不支持层上的 $.focus(),而 IE9 支持.无论如何,让webkit浏览器也这样做
- java脚本不能自动写入硬盘,但Java可以这样做