面向对象的javascript和requestAnimationFrame

时间:2014-12-22 23:15:36

标签: javascript requestanimationframe

你好,有人可以解释一下。

此代码没有问题,但如果您取消注释requestAnimationFrame,我会收到错误:无法设置属性' apple'未定义的

var food = function () {
    this.makaroni = 5;
    this.fruits = {
        apple:1, 
        banana:3
    };
}    
food.prototype =  {
    change: function () {
        this.makaroni = 10;
        this.fruits.apple = 5;
        //requestAnimationFrame(this.change);
    }
}
var food1 = new food();
food1.change();

我不明白这里=)。 而问题只有苹果,makaroni没有问题。我真的不明白=)。

2 个答案:

答案 0 :(得分:3)

requestAnimationFrame使用this.change变为this的新上下文调用window。您需要将传递给requestAnimationFrame的函数绑定到当前上下文。

requestAnimationFrame(this.change.bind(this));

答案 1 :(得分:0)

你必须使用.prototype吗?

工作示例.... http://jsfiddle.net/ebkjvLe0/2/

var food = function () {

    var _this = this; //SCOPE

    this.makaroni = 5;
    this.fruits = {apple:1, banana:3};
    this.change = function () {
        _this.makaroni = 10;
        _this.fruits.apple = 5;
        requestAnimationFrame(function(){
            _this.change();
        });
    }
}

// Instantiate a new food, change, alert
var cat = new food();
cat.change();
alert(cat.makaroni);
alert(cat.apple);