2013-06-19 76 views
0

在我正在工作的化身生成器中,我有幾個按鈕事件可以做同樣的事情,但使用不同的身體部位。我不希望有不同的功能做同樣的事情,所以我想對所有身體部位使用一個功能。對同一功能使用不同的對象屬性

下面的第14行使用對象propery'AvGen.eyes.currEyesNr',但是我想用一個點擊按鈕。我可以將什麼作爲參數放入,以及如何使用函數中的參數來使用正確的對象參數?從currBodyNr屬性指示當前索引值的

1. prevBodyBtn.on('click', function(){ 
    2.  if (AvGen.theBody.currBodyNr > 0) { 
    3.   changePart(-1); 
    4.  } 
    5. }); 
    6. 
    7. prevEyesBtn.on('click', function(){ 
    8.  if (AvGen.eyes.currEyesNr > 0) { 
    9.   changePart(-1); 
    10.  } 
    11. }); 
    12. 
    13. function changePart(direction) { 
    14.  AvGen.eyes.currEyesNr += direction; // <-- this is now always 'AvGen.eyes.currEyesNr' but should be dynamic 
    15. 
    16.  var body = AvGen.theBody.bodies[AvGen.theBody.currBodyNr], 
    17.   eyes = AvGen.eyes.eyes[AvGen.eyes.currEyesNr], 
    18.   nose = AvGen.nose.noses[AvGen.nose.currNoseNr]; 
    19.   mouth = AvGen.mouth.mouths[AvGen.mouth.currMouthNr]; 
    20. 
    21.  AvGen.addSVG(body, eyes, nose, mouth); 
    22. } 

回答

2

更改名字,currEyesNr等,以currNr

然後你可以直呼其名的AvGen所需的屬性:

function changePart(direction, bodyPartName) { 

var part = AvGen[bodyPartName]; 
part.currNr += direction; 

... 

,並稱之爲:

changePart(-1, "eyes"); 

changePart(-1, "theBody"); 

另一種方式來做到這一點是簡單地傳遞需要改變的身體部分作爲第二個參數:

function changePart(direction, bodyPart) { 
    bodyPart.currNr += direction; 

,並稱之爲:

changePart(-1, AvGen.eyes); 
+0

很好的答案,謝謝! – holyredbeard

0

你可以傳遞參數給「click」事件的回調,並檢查單擊了哪個項目。 比使用它來傳遞你想要的'changePart'函數。 (你可以讀取你點擊元素中的一些數據,例如將它們傳遞給你的函數)

prevEyesBtn.on('click', function(e){ 

    e.currentTarget; // this is the element that was clicked for example 
    if (AvGen.eyes.currEyesNr > 0) { 
     changePart(-1); 
    } 
}); 
相關問題