【问题标题】:Call a function once for multiple attributes为多个属性调用一次函数
【发布时间】:2016-04-22 16:57:16
【问题描述】:

如何为多个属性调用一个函数?

类似:

fillTween (  
  option1.scale, 1; 
  option2.scale, 7; 
  option3.scale, 4; 
  option4.scale, 2; 
)

  function fillTween(attr, y) {
    var tween = new TWEEN.Tween(attr).to({
      y: y
    }, 1000);
    tween.easing(TWEEN.Easing.Elastic.InOut);
    tween.start();
  }

  $("input[name='radiogroup1']").change(function() {


    if ($('#radio1').is(":checked")) {


      fillTween(option1.scale, 1);
      fillTween(option2.scale, 7);
      fillTween(option3.scale, 4);
      fillTween(option4.scale, 2);

      ...

    }

  });

【问题讨论】:

  • 你能发一些html吗
  • 如果我理解正确而不是调用 fillTween 函数 4 次,你想调用一次

标签: javascript jquery


【解决方案1】:

你不能。解决方案就是重写函数以接受参数数组。

function fillTween(attributes) {
  attributes.map(function(x) {
    var attr = x[0];
    var y = x[1];
    var tween = new TWEEN.Tween(attr).to({
      y: y
    }, 1000);
    tween.easing(TWEEN.Easing.Elastic.InOut);
    tween.start();
  })
}

然后这样称呼它:

fillTween ([  
  [option1.scale, 1],
  [option2.scale, 7],
  [option3.scale, 4],
  [option4.scale, 2]
])

【讨论】:

  • 由于您没有使用map 函数的返回数组,并且输入数组没有其他副作用,因此应该将其替换为forEach?
  • @kuhn 我不明白吗?为什么我需要返回数组?
  • @kuhn 如果你有什么误解:我这里使用map只是为了迭代,我不需要返回值。
  • 我知道,你不需要它。但是map 仍在创建一个新数组,您只需将其丢弃。 forEach 对输入数组进行操作。 stackoverflow.com/questions/7340893/…
  • @kuhn 我非常清楚这一点。你为被扔掉的阵列感到遗憾吗?如果没有,那么仍然没有必要建议forEachmap 更短。
【解决方案2】:

如果您不想修改您的函数和/或可能想为不同的函数做类似的事情,您可以修改函数原型以创建一个新的“多个”函数,如下所示:

Function.prototype.multiple = function() {
  for (var i = 1; i < arguments.length; i++) {
    this.apply(arguments[0],arguments[i]);
  }
}

然后你可以多次调用该函数,如下:

fillTween.multiple(this,
  [ option1.scale, 1 ], 
  [ option2.scale, 7 ],
  [ option3.scale, 4 ],
  [ option4.scale, 2 ] 
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多