我在页面的正文部分有一个带有此javascript的html页面
JSFiddle link(我是jsfiddle的新手,无法让它工作,对此有任何帮助,我们很感激......)
Firebug控制台在0
,request
中undefined
和onError
中0
向我显示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();
}
}
答案 0 :(得分:1)
代码搞砸了this
关键字。
onError
从您的代码外部调用,它的this
指向一个未知对象(可能为null)。
为了防止这种情况发生,您有以下两个选项之一:
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);
}
}
在创作过程中将其绑定到Loader
:
var _this = this;
function onError(){
console.log("this.loadErrors in onError: " + _this.loadErrors);
// _this.loadErrors++;
callback();
}