Когда вы делаете это:
appcontent.addEventListener("DOMContentLoaded", this.onPageLoad, true);
вы просто добавляете функцию, которая удерживается в onPageLoad
в качестве обработчика событий. Соединение с объектом потеряно, и this
при выполнении будет ссылаться на глобальный объект.
Просто создайте анонимную функцию, как вы делаете для события load
:
var that = this; // capture reference to object
appcontent.addEventListener("DOMContentLoaded", function(event) {
that.onPageLoad(event);
// myextobj.onPageLoad(event); should also work in this case
}, true);
Помните, что функции являются объектами первого класса в JavaScript, их можно передавать как любое другое значение. Функции не имеют ссылки на объект, для которого они определены, потому что они не принадлежат этому объекту. Это просто другой тип данных.
То, на какой объект this
ссылается в функции, определяется при выполнении и зависит от контекста , в котором выполняется функция. Если вы вызываете obj.func()
, тогда контекст равен obj
, но если вы назначаете функцию другой переменной раньше, например var a = obj.func
(то есть, когда вы добавляете обработчик событий (в некотором смысле)), а затем вызываете a()
, this
будет ссылаться на глобальный объект (который является window
большую часть времени).