2012-02-13 4 views
1

скажем, у меня есть JavaScript-класса, как это:Адресация объекта-функции в JavaScript Event-Handler

Foo.prototype = { 
    init: function() { 
    $(document).keydown(function(event) { 
     this.onKeyDown(event); 
    }); 
    } 

    onKeyDown: function(event) { 
    alert("bar"); 
    } 
} 

myObj = new Foo(); 
myObj.init(); 

Этот код не будет работать, потому что в

$(document).keydown(function(event) { 
    this.onKeyDown(event); 
}); 

' это, конечно, неизвестно и не относится к объекту. Как я могу в любом случае обратиться к методу onkeydown Foo-Class?

Мне не нужно обменивать 'this' с 'myObj' (имя объекта), так как я могу использовать класс для других объектов.

Благодарим за помощь!

ответ

4

магазин в переменной ...

Foo.prototype = { 
    init: function() { 
    var self = this 
    $(document).keydown(function(event) { 
     self.onKeyDown(event); 
    }); 
    } 
} 

или использовать jQuery.proxy для возврата функции со значением this связанной ...

Foo.prototype = { 
    init: function() { 
    $(document).keydown($.proxy(function(event) { 
     this.onKeyDown(event); 
    }, this)); 
    } 
} 

или вы можете использовать Function.prototype.bind, но вы ll необходимо исправить его для старых браузеров.

Foo.prototype = { 
    init: function() { 
    $(document).keydown((function(event) { 
     this.onKeyDown(event); 
    }).bind(this)); 
    } 
} 
Смежные вопросы