高洛峰2017-06-26 10:54:55
h2那裡因為是綁定在事件上的,因此 this 指向的是這個元素,你可以簡單理解為是
var dom = document.getElementsByTagName('h2')
dom.onmousedown = function(){
f1(this)
}
漂亮男人2017-06-26 10:54:55
前者相當於`請輸入代碼
var h2 = document.querySelectorAll("h2")[0];
function fn(){
console.log(this);
}
h2.onmousedown = fn;
window.fn();
this指向呼叫它的對象,你定義在全域環境裡的變數和函數預設是window對像下得屬性和方法,所以當你在全域環境中執行fn()時this指向window
PHP中文网2017-06-26 10:54:55
這兩個不是一回事呀。
<h2 onmousedown="f1(this)"></h2>
h2.onmouseover=f1()
h2.addEventListern(f1)
這三種方式都是為h2綁定了一個mouseover事件發生時的名為f1回呼函數,事件綁定的回呼函數指向DOM元素本身。
你問題中的
//HTML方式绑定
function f1(obj){
console.log(obj);
}
f1( this );
這段程式是在window作用域下運作的,this自然就指向window。這段程式碼跟h2無關了(未綁定)。