我想在不编写X代码的情况下这样做。你是如何用JavaScript做的?我来自Java。
floors[0].on("up_button_pressed", function() {
elevator.goToFloor(floors[0].floorNum());
} );
floors[0].on("down_button_pressed", function() {
elevator.goToFloor(floors[0].floorNum());
} );
floors[1].on("up_button_pressed", function() {
elevator.goToFloor(floors[1].floorNum());
} );
floors[1].on("down_button_pressed", function() {
elevator.goToFloor(floors[1].floorNum());
} );
floors[2].on("up_button_pressed", function() {
elevator.goToFloor(floors[2].floorNum());
} );
floors[2].on("down_button_pressed", function() {
elevator.goToFloor(floors[2].floorNum());
} );
floors[3].on("up_button_pressed", function() {
elevator.goToFloor(floors[3].floorNum());
} );
floors[3].on("down_button_pressed", function() {
elevator.goToFloor(floors[3].floorNum());
} );
floors[4].on("up_button_pressed", function() {
elevator.goToFloor(floors[4].floorNum());
} );
floors[4].on("down_button_pressed", function() {
elevator.goToFloor(floors[4].floorNum());
} );
答案 0 :(得分:1)
您可以使用Array.forEach
并将您的代码重构为以下
floors.forEach(function(floor){
floor.on('up_button_pressed,down_button_pressed', function(){
elevator.goToFloor(floor.floorNum());
});
});
当触发up_button_pressed
或down_button_pressed
时,您没有做任何具体的事情,所以只需使用逗号组合这些事件。
答案 1 :(得分:1)
我们走了...... 首先,你需要一个你需要迭代的函数。
floors[0].on("up_button_pressed", function() {
elevator.goToFloor(floors[0].floorNum());
} );
然后转换该代码,以便代码可以在迭代中工作(例如for循环)
for(var i=0; i<x; i++){
floors[i].on("up_button_pressed", function(i) {
elevator.goToFloor(floors[i].floorNum());
}, i ); }
我在casperjs上这样做,但我认为这也适用于普通的javascript ...(因为casperjs也是javascript)
答案 2 :(得分:1)
首先,在
中floors[0].on("up_button_pressed", function () {
elevator.goToFloor(floors[0].floorNum());
});
函数内的floors[0]
始终与触发事件的对象相同,因此我将其更改为使用this
:
floors[0].on("up_button_pressed", function () {
elevator.goToFloor(this.floorNum());
});
然后,只需使用forEach
:
floors.forEach(function (floor) {
floor.on("up_button_pressed", function () {
elevator.goToFloor(this.floorNum());
});
// same for "down_button_pressed" here
});
由于处理函数不需要访问外部变量floor
并使用this
,您甚至可以在循环中定义它们并按名称使用它们,如果您愿意的话:
function onFloorUp() {
elevator.goToFloor(this.floorNum());
}
// same for onFloorUp
floors.forEach(function (floor) {
floor.on("up_button_pressed", onFloorUp);
// same for "down_button_pressed" here
});