Проблема с вашим кодом здесь, в следующей строке кода вы определили анонимную функцию и передали ее в качестве обработчика события для события onClick в следующих строках:
row.attachEvent('onclick', function(){this.DoSomething();});
и
row.addEventListener('click', function(){this.DoSomething();}, false);
когда возникает событие onclick и он вызывает анонимную функцию, которую вы передали, этот контекст ссылается на объект, который вызвал событие, но не myObject .
потому что в этот момент исполняемый контекст находится в контексте обработчика событий.
Решение: вы можете выполнить хитрость, о которой говорил Майк Кантор, или с помощью jQuery использовать прокси-метод, чтобы определить этот контекст в анонимной функции.
Итак, ваш код будет выглядеть так:
var myObject = {
AddChildRowEvents: function(row, p2) {
if(document.attachEvent) {
row.attachEvent('onclick', $.proxy(function () {
this.DoSomething();
}, this));
} else {
row.addEventListener('click', $.proxy(function () {
this.DoSomething();
},this), false);
}
},
DoSomething: function() {
this.SomethingElse(); //<-- Error here, object 'this' does not support this method.
}
}
вы упомянули, что ошибка в this.SomthingElse () , но ваш код не показывает ее. Если вы действительно получаете ошибку в этой строке кода, возможно, вы используете метод DoSomthing где-то еще в качестве обработчика события.