[英]define a function for each array element
我想這樣做而無需編寫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());
} );
您可以只使用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
時,您沒有做任何特定的事情,因此只需使用逗號組合這些事件即可。
我們開始...首先,您需要執行一個需要迭代的函數。
floors[0].on("up_button_pressed", function() {
elevator.goToFloor(floors[0].floorNum());
} );
然后轉換代碼,以便代碼可以迭代(例如,循環)工作
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)
首先,在
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
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.