Ваш метод onClick
вызывается в другом контексте при использовании в качестве обработчика событий в этом методе - this
больше не ссылается на ваш KoolTabs
экземпляр.
Простое решение - создатьзамыкание с помощью самореферентной переменной с другим именем.
function KoolTabs() {
var self = this;
this.targetName = "";
this.activeNode = 1;
this.init = function()
{
this.targetName = arguments[0];
this.activeNode = (arguments[1] || 1);
this.setEle( this.activeNode );
this.findNodes();
}
this.findNodes = function()
{
for (i=0;i<document.links.length;i++) {
myEle = document.links[i];
x = document.links[i].href;
if (x.indexOf("#" + this.targetName) >= 0) {
myEle.addEventListener('click', this.onClick, false);
}
}
}
this.onClick = function()
{
// "this" refers to a different object now. use the "self"
// variable to reference the KoolTabs instance.
alert('Hello ' + self.activeNode);
}
};
Если вы хотите получить фантазию, вы можете посмотреть на метод bind
jQuery, чтобы увидеть, как он генерирует вызов функции с соответствующей областью действия.применяется.это будет что-то вроде
$(myEle).click( this.onClick.bind(this) );
, а когда срабатывает onClick
, this
будет указывать на то, что вы ожидаете.вам не нужно определять ссылку self
.