見我的代碼 http://jsfiddle.net/kxATT/3/價值這說明當事件處理程序以兩種不同的方式被分配不同的結果
function byId(id) {
if (id) {
return document.getElementById(id);
} else {
return null;
}
}
function setAttr(elm, attr, value) {
elm.setAttribute(attr, value);
}
var app = {
id: 12,
fn: function() {
alert(this.id);
}
};
function init() {
setAttr(byId('txt'), 'onclick', 'app.fn()');
byId('txt1').addEventListener('click', app.fn, true);
}
當點擊第一個框,它提醒12
。對於第二個盒子來說,這個盒子是txt1
。很顯然,在這兩種情況下,儘管我打電話的功能相同,但是this
指的是不同的對象。我聽說,對於輸入元素,元素的對象本身被傳遞給函數,並在事件處理函數中作爲this
進行了處理。如果是這樣,爲什麼在使用setAttribute添加事件時不是這樣。
'app.fn()'....這個函數內部,'this'將參考'app'。 [在MDN上閱讀關於'this'的更多信息](https://developer.mozilla.org/en/JavaScript/Reference/Operators/this)。這是事實處理程序中的元素。嘗試'setAttr(byId('txt'),'onclick','console.log(this); app.fn()');'。字符串「app.fn()」的內容是事件處理程序的主體,所以'this'將引用該元素。但'app.fn()'只是你從事件處理函數*調用的一個函數,並且上下文永遠不會「傳送」過來(除非你使用'.call()'或'.apply()')。 –
感謝您的鏈接...其新信息給我 –