函数未作为函数传递

时间:2013-01-09 18:28:04

标签: javascript three.js anonymous-function

我正在开发一个简短的'Engine'类,以简化与Three.js的交互。我将示例的Render()方法重构为此Engine JS类,如下所示:

var Engine = function () {
  var pub = {},
      scene,
      camera;

  // SNIP: Extra private and public variables and functions...

  pub.Render = function (fixedUpdate) {
    requestAnimationFrame(pub.Render);
    fixedUpdate();
    renderer.render(scene, camera);
  };

  return pub;
}();

我试图通过传递一些我想对其执行的动作的函数来使用它。例如:

Engine.Render(function () {
    cube.rotation.x += 0.01;
    cube.rotation.y += 0.02;
});

但是,当我尝试在Chrome中运行此功能时,我收到错误:未捕获TypeError:数字不是函数,并且在检查Engine.Render的fixedUpdate变量时,它通常是一些非常大的数字,显然没有注册为调用代码传入的匿名函数。

作为一个完整性测试,我尝试将句柄传递给非匿名函数,如:

function animation() {
  cube.rotation.x += 0.01;
  cube.rotation.y += 0.02;
}

Engine.Render(animation);

......并得到完全相同的结果。我怀疑问题在于我如何调用参数。

1 个答案:

答案 0 :(得分:3)

试试这个:

  pub.Render = function (fixedUpdate) {
    requestAnimationFrame(function () {pub.Render();});
    fixedUpdate();
    renderer.render(scene, camera);
  };