Javascript对象属性在回调函数中不可访问

时间:2016-01-17 10:39:57

标签: javascript

我在页面的正文部分有一个带有此javascript的html页面

JSFiddle link(我是jsfiddle的新手,无法让它工作,对此有任何帮助,我们很感激......)

Firebug控制台在0requestundefinedonError0向我显示callback。我有两个问题,为什么我无法访问this.loadErrors中的onError,以及如何实现此错误计数器?

编辑:源代码

var loader = new Loader();
loader.request(callback);

function callback(){
    console.log("loader.loadErrors in callback: " + loader.loadErrors);
}

function Loader(){
    this.loadErrors = 0;

    this.request=function(callback){
        for (var i = 0; i < 3; i++){
            console.log("this.loadErrors in request: " + this.loadErrors);
            $.ajax("example", {error: onError}).done(callback);
        }
    }

    function onError(){
        console.log("this.loadErrors in onError: " + this.loadErrors);
        // this.loadErrors++;
        callback();
    }
}

1 个答案:

答案 0 :(得分:1)

代码搞砸了this关键字。

onError从您的代码外部调用,它的this指向一个未知对象(可能为null)。

为了防止这种情况发生,您有以下两个选项之一:

    在调用之前,
  1. bind() onError()函数发送到Loader

    this.request=function(callback){
        for (var i = 0; i < 3; i++){
            console.log("this.loadErrors in request: " + this.loadErrors);
            $.ajax("example", {error: onError.bind(this)}).done(callback);
        }
    }
    
  2. 在创作过程中将其绑定到Loader

    var _this = this;
    function onError(){
        console.log("this.loadErrors in onError: " + _this.loadErrors);
        // _this.loadErrors++;
        callback();
    }