[英]Why doesn't the “this” keyword work here?
<button onclick="test()">Will it work?</button>
function test() {
this.innerHTML = "It works!";
}
該按鈕將調用功能測試,因此它應該受到“ this”關鍵字的影響。
傳遞給函數
<button onclick="test(this)">
function test(btn) {
console.log(btn);
btn.innerHTML = "it worked";
}
從MDN文檔中 :
在函數內部,此值取決於函數的調用方式。
簡單的電話
function f1(){ return this; } f1() === window; // global object
在這種情況下,值
this
不被調用設置。 由於代碼是不是在嚴格模式下,價值this
必須是一個對象,它默認為全局對象。
因此,每當您將函數調用為func()
, this
指向全局對象。 這就是您在這里所做的:
onclick="test()"
你是正確的, this
事件里面處理程序參照處理程序綁定到元素,但test
不是事件處理程序,它是在事件處理程序的身體 。 從屬性值生成的處理程序看起來像
function(event) {
test();
}
所以你看,這是一個“簡單的調用”,所以沒有什么問題, this
指的是。
如果你想擁有它指的是按鈕,然后就可以用.call
,撥打test
,並明確設置this
來傳遞的值:
onclick="test.call(this)"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.