Я не знаю, намеренно ли вы хотите избежать этого, но вы можете просто передать анонимную функцию в качестве обработчика события и вызвать foo.event()
.
Вы можете используйте bind()
и функции стрелок, как предлагали другие парни, но вы также можете просто сделать это.
function Bar() {
this.string = "something";
this.event = function(e) {
console.log("This should say something: " + this.string);
}
}
var foo = new Bar();
window.addEventListener("mouseover", function() {
foo.event();
});
Это работает, потому что обработчик события вызывается с this
, указывающим на объект Window.Когда foo.event
является обработчиком, его this
перезаписывается.Однако, если вы вызываете ее из анонимной функции, эта анонимная функция «поглощает» this
слушателя, а когда вы вызываете foo.event()
, она работает нормально.