0

私が取り組んでいるアバタージェネレーターには、同じことを行うが異なるボディパーツを持ついくつかのボタンイベントがあります。同じことをするさまざまな関数を持たせたくないので、すべての体の部分に 1 つの関数を使用したいと考えています。

以下の 14 行目では、オブジェクト プロパティ 'AvGen.eyes.currEyesNr' を使用していますが、代わりに、クリックされたボタン用のものを使用したいと考えています。引数として何を入れることができますか? また、正しいオブジェクト パラメーターを使用できるようにするには、関数でパラメーターを使用するにはどうすればよいですか?

    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.    }
4

2 に答える 2

2

現在のインデックス値を示すプロパティの名前をなどからcurrBodyNrに変更します。currEyesNrcurrNr

次に、必要なプロパティをAvGen名前で指定できます。

function changePart(direction, bodyPartName) {

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

...

そしてそれを呼び出します:

changePart(-1, "eyes");

また

changePart(-1, "theBody");

別の方法として、変更が必要な本体部分を 2 番目のパラメーターとして渡すだけです。

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

そしてそれを呼び出します:

changePart(-1, AvGen.eyes);
于 2013-06-19T21:54:07.107 に答える