回调和requestAnimationFrame
我有一个非常奇怪的问题。它成功执行一次,但第二次回调变为Number。
function TEST () {
this.michou = "jean";
}
TEST.prototype.talk = function(fn) {
window.requestAnimationFrame(this.talk.bind(this));
alert(typeof fn); //type of callback
fn();
};
var jean = new TEST();
jean.talk(function() {
alert("hello");
});
如果您尝试此代码,您将在警报“function”“hello”和“number”“number”中看到。为什么callback
的类型显示“数字”?
答案 0 :(得分:1)
在动画帧中调用.talk()
函数时,没有传递fn
值(虽然传递了某些;见下文)。如果您更改了代码,则可以修复:
TEST.prototype.talk = function(fn) {
window.requestAnimationFrame(this.talk.bind(this, fn));
alert(typeof fn); //type of callback
fn();
};
如果在将函数绑定到对象引用时将fn
作为第二个参数传递,则将使用正确的this
值和参数调用该函数
代码看到的数字值是浏览器传递给动画帧回调的高分辨率时间戳。如果代码如上所述更改,它仍会传递,但它将是第二个参数,而不是第一个参数。