2013-04-04 3 views
0

Привет Как использовать метод несколько раз, не повторяя и не создавая другого метода в JavaScript. Потому что я сделал то, что создал метод с теми же полями и кодом, но только различие - это идентификатор. Мне нужен один параметр для каждого метода, который будет идентификатором.Эффективный метод в JavaScript

function enemyGet() { 

    new enemyMove2() 
    new enemyMove() 
    new enemyMove3() 
} 

    function enemyMove2() { 

    var enemyimage = document.getElementById("enemy"); 
     var leftenemy = parseInt(enemyimage.style.left); 
     var topenemy = parseInt(enemyimage.style.top); 
     var time = setTimeout("enemyMove2()", 20) 

     if (leftenemy < leftplayer) { 
      leftenemy = leftenemy + 5; 

     } 
     if (leftenemy > leftplayer) { 
      leftenemy = leftenemy - 5; 

     } 

     if (topenemy < topplayer) { 
      topenemy = topenemy + 5; 
     } 
     if (topenemy > topplayer) { 
      topenemy = topenemy - 5; 
     } 

     enemyimage.style.left = leftenemy + "px"; 
     enemyimage.style.top = topenemy + "px"; 

     var hit_list = $("#x").collision(".lollol"); 
     hit_list.remove(); 

} 

function enemyMove() { 


    var enemyimage = document.getElementById("enemy2"); 
    var leftenemy = parseInt(enemyimage.style.left); 
    var topenemy = parseInt(enemyimage.style.top); 
    var time = setTimeout("enemyMove()", 20) 

    if (leftenemy < leftplayer) { 
     leftenemy = leftenemy + 5; 

    } 
    if (leftenemy > leftplayer) { 
     leftenemy = leftenemy - 5; 

    } 

    if (topenemy < topplayer) { 
     topenemy = topenemy + 5; 
    } 
    if (topenemy > topplayer) { 
     topenemy = topenemy - 5; 
    } 

    enemyimage.style.left = leftenemy + "px"; 
    enemyimage.style.top = topenemy + "px"; 

    var hit_list = $("#x").collision(".lollol"); 
    hit_list.remove(); 

} 

function enemyMove3() { 


    var enemyimage = document.getElementById("enemy3"); 
    var leftenemy = parseInt(enemyimage.style.left); 
    var topenemy = parseInt(enemyimage.style.top); 
    var time = setTimeout("enemyMove3()", 20) 

    if (leftenemy < leftplayer) { 
     leftenemy = leftenemy + 5; 

    } 
    if (leftenemy > leftplayer) { 
     leftenemy = leftenemy - 5; 

    } 

    if (topenemy < topplayer) { 
     topenemy = topenemy + 5; 
    } 
    if (topenemy > topplayer) { 
     topenemy = topenemy - 5; 
    } 

    enemyimage.style.left = leftenemy + "px"; 
    enemyimage.style.top = topenemy + "px"; 

    var hit_list = $("#x").collision(".lollol"); 
    hit_list.remove(); 

} 

ответ

2

Используйте параметр:

function enemyGet() { 
    // pass the id as a argument to the function 
    enemyMove("enemy2") 
    enemyMove("enemy") 
    enemyMove("enemy3") 
} 

function enemyMove(enemy) { 
    // the variable enemy is the id passed as an argument to the function 
    var enemyimage = document.getElementById(enemy); 
     var leftenemy = parseInt(enemyimage.style.left); 
     var topenemy = parseInt(enemyimage.style.top); 
     // Pass the parameter in timeout as well. You have access to enemy variable due to concept of closure 
     var time = setTimeout(function(){enemyMove(enemy)}, 20) 

     if (leftenemy < leftplayer) { 
      leftenemy = leftenemy + 5; 

     } 
     if (leftenemy > leftplayer) { 
      leftenemy = leftenemy - 5; 

     } 

     if (topenemy < topplayer) { 
      topenemy = topenemy + 5; 
     } 
     if (topenemy > topplayer) { 
      topenemy = topenemy - 5; 
     } 

     enemyimage.style.left = leftenemy + "px"; 
     enemyimage.style.top = topenemy + "px"; 

     var hit_list = $("#x").collision(".lollol"); 
     hit_list.remove(); 

} 
+0

Есть ли способ использовать только один метод, но имеет другой идентификатор? – user2242573

+0

Yup. Вы передаете id в качестве аргумента функции – basarat

+0

Любая причина, по которой вы используете 'new' для вызова функций? – Ian

1

В таких случаях вы можете параметризовать значение, изменяющееся между вызовами.

Вы можете передать переменную id в качестве параметра методу enemyMove.

function enemyMove(id) { 


    var enemyimage = document.getElementById(id); 
    var leftenemy = parseInt(enemyimage.style.left); 
    var topenemy = parseInt(enemyimage.style.top); 
    var time = setTimeout(function(){ 
     enemyMove(id); 
    }, 20) 

    if (leftenemy < leftplayer) { 
     leftenemy = leftenemy + 5; 

    } 
    if (leftenemy > leftplayer) { 
     leftenemy = leftenemy - 5; 

    } 

    if (topenemy < topplayer) { 
     topenemy = topenemy + 5; 
    } 
    if (topenemy > topplayer) { 
     topenemy = topenemy - 5; 
    } 

    enemyimage.style.left = leftenemy + "px"; 
    enemyimage.style.top = topenemy + "px"; 

    var hit_list = $("#x").collision(".lollol"); 
    hit_list.remove(); 

} 

Тогда

function enemyGet() { 

    new enemyMove('enemy') 
    new enemyMove('enemy2') 
    new enemyMove('enemy3') 
} 
+0

Есть ли способ использовать только один метод, но имеет другой идентификатор? – user2242573

+0

Ваш 'setTimeout' не будет работать – Ian

+0

Да, это тоже моя проблема .. но есть ли способ держать его в движении? – user2242573

-1

Вы можете использовать квадратные скобки, обозначения для ссылки на функцию:

// Store reference to global object for use wherever 
var global = this; 

... 
    var n = 3; 

    // Call method based on value of n 
    global['enemyMove' + n](); 

...

Вы можете создавать свои функции (методы) некоторых объектов, кроме глобального/оконного объекта.