1

这是我到目前为止所拥有的:http: //jsfiddle.net/nxCFn/

var il = new ImageLoader();

function ImageLoader() {
    this.n = 2;

    this.load = function() {
        //obviously, the this = the image and not the original instance of ImageLoader :(
        this.n++;
        console.log(this.n);
    }

    this.imgnam = "http://www.google.com/images/errors/logo_sm.gif";

    this.img = new Image();
    this.img.src = this.imgnam;
    this.img.onload = this.load;
}​

因为图像是.load() thisload点调用图像。我想this从加载点到ImageLoader它“属于”的实例。

4

3 回答 3

1

复制对this局部变量的引用,并使事件处理程序成为匿名函数,以便在函数的闭包中捕获局部变量:

var that = this;

this.img.onload = function() { that.load() };
于 2012-09-08T14:31:27.877 回答
1
var that = this;
this.img.onload = function () { that.load();}
于 2012-09-08T14:31:44.517 回答
1

利用Function.prototype.bind

this.img.onload = this.load.bind(this);

或者您可以在此处使用它,因为您为每个实例创建了一个新函数。

this.load = function() {
    this.n++;
    console.log(this.n);
}.bind(this);


this.img.onload = this.load;

要支持旧浏览器,您可以制作自己的活页夹功能。

function _binder(func, ctx /*, arg1, argn */) {
    var _slice = Array.prototype.slice,
        bound_args = _slice.call(arguments, 2);
    return function() {
        return func.apply(ctx, bound_args.concat(_slice.call(arguments)));
    }
}

然后这样做。

this.img.onload = _binder(this.load, this);
于 2012-09-08T14:33:48.920 回答