Конечно, есть лучший метод.Он включает создание функции, контекст которой this
уже привязан к определенному объекту.
Чтобы контекст this
ссылался на текущий объект, вызовите метод bind()
для функции и передайтеОбязательный контекст в качестве параметра.
google.maps.event.addListener(this.marker, 'click', function() {
this.info_window.setContent('Chicago marker');
this.info_window.open(this.map,this.marker);
}.bind(this)); // <-- notice we're calling bind() on the function itself
Теперь это часть стандарта ECMAScript, и если браузер не реализует его изначально, это легко сделать самостоятельно.
if (!Function.prototype.bind) {
Function.prototype.bind = function () {
var fn = this,
args = Array.prototype.slice.call(arguments),
object = args.shift();
return function () {
return fn.apply(
object, args.concat(Array.prototype.slice.call(arguments))
);
};
};
}
Просмотреть все вопросыи ответы на SO, связанные с этим.