<input type="button" value="Button 1" id="btn1" />
<input type="button" value="Button 2" id="btn2" />
<input type="button" value="Button 3" id="btn3" onclick="buttonClicked();"/>
<script type="text/javascript">
function buttonClicked(){
var text = (this === window) ? 'window' : this.id;
console.log(text);
}
var button1 = document.getElementById('btn1');
var button2 = document.getElementById('btn2');
button1.onclick = buttonClicked;
button2.onclick = function(){
buttonClicked();
};
</script>
當單擊Button1,顯示:btn1
,單擊按鈕2和按鈕3,說明:window,
爲什麼不btn2
,btn3
?
您應該閱讀[關於**這個**關鍵字](http://www.quirksmode.org/js/this.html) – doppelgreener
儘管QuirksMode頁面很好地解釋了它,但我並不完全確定是否「複製」是正確的詞。它不復制函數,只是複製一個引用。調用上下文是爲函數執行上下文設置'this'引用。 –
你可以很容易地檢查該功能是否被*複製*爲button1.onclick = buttonClicked; console.log(button1.onclick === buttonClicked);'函數是對象,對象之間的等式比較只在兩個引用指向同一個對象時才返回true。 –