Использование методов экземпляра в качестве обратных вызовов для обработчиков событий изменяет область действия this
с «Мой экземпляр» на «Независимо от того, что только что вызвало обратный вызов» . Так что мой код выглядит так
function MyObject() {
this.doSomething = function() {
...
}
var self = this
$('#foobar').bind('click', function(){
self.doSomethng()
// this.doSomething() would not work here
})
}
Это работает, но это лучший способ сделать это? Это выглядит странно для меня.
this
JavaScript является динамическим в JavaScript. Оно определяется при вызове функции , а не при ее объявлении».
self === this
. Поэтому self
в локальном контексте имеет смысл и следует шаблону.
self
посколькуwindow.self
объект существует, и вы можете случайно использовать его, если забудете объявить свой собственныйself
var (например, при перемещении некоторого кода). Это может раздражать, чтобы обнаружить / отладить. Лучше использовать что-то вроде_this
.