Javascript

时间:2018-04-19 14:18:23

标签: javascript callback

我正在编写一些执行以下操作的JavaScript:

  1. main函数创建一个名为“currentState”的“ModelState”实例。
  2. “currentState”对象创建一个名为“scene”的“LabScene”实例。
  3. 然后场景尝试对“currentState”执行回调,并将自身作为参数传递。
  4. 我收到以下错误:
  5. 未捕获的TypeError:无法读取未定义的属性“push” 在ModelState.dirtyListCallback(Test.js:16)

    代码如下:

    function main(){
        //load state
        var currentState = new ModelState();
    }   
    
    function ModelState(){
    
        this.dirtyList = [];
        //initialize the scene.
        this.scene = new LabScene(this.dirtyListCallback);
    }
    
    ModelState.prototype.dirtyListCallback = function(dirtyObject){
        this.dirtyList.push(dirtyObject);
        console.log(this.dirtyList);
    };
    
    function LabScene(dirtyListCallback){
        dirtyListCallback(this);
    }
    

    我希望currentState对象将场景对象存储在dirtyList数组中。但那并没有发生。这是一个更大的代码库的一部分,在这个代码库中,子对象应该将自己标识为对其父级“脏”(需要重新绘制)。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

this内执行dirtyListCallback时,LabScene的范围将是(window || global)。

您需要绑定要执行dirtyListCallback方法的范围。

this.scene = new LabScene(this.dirtyListCallback.bind(this));