2017-10-07 88 views
1

這裏是我的代碼,現在有些人可能會說爲什麼不只是在該功能塊中包含一行代碼,但我不想,我該如何實現這一點。我怎麼能叫this.click方法上 「點擊」 事件按鈕的javascript中的「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); 

回答

1

更改此:

me.el.addEventListener("click", me.click, false);//.... 

這樣:當你只傳遞me.click

me.el.addEventListener("click", me.click.bind(me), false);//.... 

,你只是傳遞對click函數的引用,並且綁定到me丟失。 .bind()將創建一個自我約束存根函數,在調用事件處理函數時將爲您提供正確的this值。

+1

+1問題是函數的上下文,用bind可以選擇「this」上下文,這裏是關於什麼是綁定的鏈接:https://developer.mozilla.org/en-US/docs/Web/ JavaScript/Reference/Global_Objects/Function/bind – Kalamarico

+0

這太酷了,謝謝 –