Когда вы назначаете функцию для свойства элемента DOM, например onclick
, this в этой функции (при ее вызове) будет элементом DOM.Однако вы можете изменить это, используя apply
и / или небольшое закрытие.
Проверьте это (это все еще очень похоже на ваш пример, но посмотрите комментарии о том, что происходит сейчас):
<script type="text/javascript">
// Obj with properties of its own, including a cool DOM object
function Obj(domobj, name) {
this.name = (typeof name==='undefined') ? 'Clemens Prerovsky' : name;
this.o = domobj;
// Closure time! Preserve this 'this', using 'that'
var that = this;
domobj.onclick = function () {return that.clickHandler();};
}
// Handler of clicks
Obj.prototype.clickHandler = function () {
alert(this.o.innerHTML+', name:'+this.name);
}
// Create objects with references
$(document).ready(function() {
var o1 = new Obj(document.getElementById('b1'));
var o2 = new Obj(document.getElementById('b2'), 'npup');
});
</script>
Я призываю вас не создавать глобальные переменные по ошибке,Позаботьтесь и объявите свои переменные, чтобы избежать неприятных сюрпризов.В этом примере от этого остались объекты o1
и o2
.
При создании циклических ссылок всегда возникают неприятные сюрпризы, и вы рискуете получить утечку памяти, если они не обрабатываются должным образом.Действительно ли так нужны «пользовательские объекты»?
HTH.