вот мой код. Теперь некоторые люди могут сказать, почему не просто включить код одной строки в этот функциональный блок, но я не хочу, как мне это достичь. Как я могу вызвать метод this.click
"click" кнопки
var i = 0;
function el() {
this.type = "button",
this.el = false,
this.click = function () {
this.setHtml(i++);
},
this.setHtml = function (t) {
this.el.innerHTML = t;
}
fragment = document.createDocumentFragment(),
element = fragment.appendChild(document.createElement(this.type));
element.setAttribute("data-el", this.type);
element.innerHTML = "Default Button";
this.el = element;
attachEvent("click", this);
}
// this should be a seperate function ....
function attachEvent(ev, me){
//me doesn't work, but i want it to call the click method
me.el.addEventListener("click", me.click, false);//....
}
div = new el();
document.getElementById('areaA').appendChild(div.el);
Измените это:
me.el.addEventListener("click", me.click, false);//....
к этому:
me.el.addEventListener("click", me.click.bind(me), false);//....
Когда вы передаете только me.click
, вы просто передаете ссылку на функцию click
и привязка ко me
теряется. .bind()
создаст функцию self-binding stub, которая даст вам право this
значение при вызове обработчика события.