如何将对象的链接传输到匿名函数?

时间:2012-02-16 21:04:54

标签: javascript class javascript-events anonymous-function

我正在创建一个加载图像并在加载后调用其方法的类。

function Texture(){
    this.afterload = function(){
        document.write("loaded!");
    }
    this.load = function(name){
        this.img = new Image();
        this.img.src = name;
        this.img.onload = function(){
            // there is the problem - how to pass "this" to anonymous function?
            this.afterload();
        }
    }
}

texture = new Texture();
texture.load("something.png")​;​
// now it should write "loaded" after loading the image.

但问题是传递一个链接到该对象。当我使用它时,它不起作用。

那么有没有办法将对象实例传递给匿名方法?

2 个答案:

答案 0 :(得分:1)

您只需将this复制到词法变量:

    this.load = function(name){
        this.img = new Image();
        this.img.src = name;
        var _this = this;
        this.img.onload = function(){
            _this.afterload(); // use local variable, '_this', instead of 'this'
        };
    };

匿名函数将“捕获”或“关闭”该变量,并且即使在其包含函数返回后仍能够引用它。

答案 1 :(得分:1)

定义指向内部函数之外的对象的另一个变量,并使用此变量来引用它。

var that = this;
this.img.onload = function(){
    that.afterload();
};