Значение this устанавливается в зависимости от того, как вызвана функция:
При вызове функции как метода:
При обычном вызове:
В new:
Явное указание:
obj.func(...) // this = obj obj["func"](...)
func(...) // this = window (ES3) /undefined (ES5)
new func() // this = {} (новый объект)
func.apply(context, args) // this = context (явная передача) func.call(context, arg1, arg2, ...)
https://learn.javascript.ru/objects-more Методы объектов и контекст вызова
https://learn.javascript.ru/js-misc Некоторые другие возможности
By ilyinalada