Когда функция вызвана, "это" относится к строке. Если Вы хотите иметь объект, можно сделать это что-то вроде этого:]
AddChildRowEvents: function(row, p2) {
var theObj = this;
if(document.attachEvent) {
row.attachEvent('onclick', function(){theObj.DoSomething();});
} else {
row.addEventListener('click', function(){theObj.DoSomething();}, false);
}
},
, Когда функция вызвана, она имеет доступ к переменной theOBj, который был в объеме, когда функция была определена.
this
всегда относится к внутренней функции, если у Вас есть вложенные функции, необходимо создать другую переменную и указать на это на this
.
var myObject = {
AddChildRowEvents: function(row, p2) {
var that = this;
if(document.attachEvent) {
row.attachEvent('onclick', function(){that.DoSomething();});
} else {
row.addEventListener('click', function(){that.DoSomething();}, false);
}
}
}
Это - распространенная проблема с закрытиями. Для разрешения это пробует что-то вроде этого:
var myObject = {
AddChildRowEvents: function(row, p2) {
var self = this;
if(document.attachEvent) {
row.attachEvent('onclick', function(){this.DoSomething(self);});
} else {
row.addEventListener('click', function(){this.DoSomething(self);}, false);
}
},
DoSomething: function(self) {
self.SomethingElse();
}
}