0

这样做很好:

var requestAnimationFrame = 
    window.requestAnimationFrame ||
    window.webkitRequestAnimationFrame ||
    window.mozRequestAnimationFrame;

function _test() {
    console.log('hello from test');
}

requestAnimationFrame(_test);

但是,将其移动到另一个文件并使用 CommonJS/webpack 将其导出会导致:

Uncaught TypeError: Illegal invocation

(像这样:)

module.exports.requestAnimationFrame = 
    window.requestAnimationFrame ||
    window.webkitRequestAnimationFrame ||
    window.mozRequestAnimationFrame;

...

var poly = require('../utils/polyfills');
poly.requestAnimationFrame(_test);

这可能非常明显,但在我看来,我不明白为什么这不起作用:/

4

1 回答 1

0

我在这里找到了答案:为什么某些函数调用在 JavaScript 中被称为“非法调用”?

似乎一些本机函数依赖于上下文,所以为了解决这个问题,我绑定到窗口:

module.exports.requestAnimationFrame = 
    (window.requestAnimationFrame ||
    window.webkitRequestAnimationFrame ||
    window.mozRequestAnimationFrame).bind(window);
于 2015-02-14T16:30:09.780 回答