2013-11-24 90 views
0

說我有以下對象:如何調用對象方法的requestAnimFrame?

function Foo(value){ 
    this.bar = value; 
    this.update(); 
} 
Foo.prototype.update = function(){ 
    console.log(this.bar); 
    this.bar++; 
    requestAnimationFrame(this.update); 
} 
Foo.prototype.setBar(value){ 
    this.bar = value; 
} 

這是行不通的。火狐給我一個錯誤:

NS_ERROR_ILLEGAL_VALUE: Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOMWindow.requestAnimationFrame] 

我想知道爲什麼,還有什麼其他的解決方案可以用來代替調用對象的更新方法,無需從你的主函數調用它(即在保持對象匿名)。

回答

2

​​不會綁定this任何東西,就像任何直接調用一樣。你可以做,使用Function.prototype.bind手動:

Foo.prototype.update = function(){ 
    console.log(this.bar); 
    this.bar++; 
    requestAnimationFrame(Foo.prototype.update.bind(this)); 
}; 

永久綁定是另一種方式:

function Foo() { 
    … 
    this.update = this.update.bind(this); 
    this.update(); 
} 
+0

在ES5這隻作品,對不對? – Qqwy

+1

@Qqwy:對。手動,你可以做'var that = this; requestAnimationFrame(function(){that.update();});'。 – rninty