Как передать ссылку на объект на анонимную функцию? - PullRequest
0 голосов
/ 17 февраля 2012

Я делаю класс, который загружает изображение и вызывает его метод после загрузки.

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 ]

1 голос
/ 17 февраля 2012

определите другую переменную, указывающую на объект вне вашей внутренней функции, и используйте эту переменную для ссылки на нее.

var that = this;
this.img.onload = function(){
    that.afterload();
};
1 голос
/ 17 февраля 2012

Вам просто нужно скопировать 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'
        };
    };

Анонимная функция «захватит» или «закроет» эту переменную и сможет ссылаться на нее даже после возвращения содержащей ее функции.

...