<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>
Domanda:cercando di capire 'questo' in alcuni codici JS
quando clic su Button1 mostra: btn1
, clic su Button2 e Button3, mostra: window,
perché non btn2
, btn3
?
Si dovrebbe leggere [sulla ** questa ** parola chiave] (http://www.quirksmode.org/js/this.html) – doppelgreener
Anche se la pagina QuirksMode lo spiega molto bene, non sono completamente sicuro se "copiare" è la parola giusta. Non copia la funzione, copia semplicemente un riferimento ad essa. Il contesto di chiamata è ciò che imposta il riferimento "this" per il contesto di esecuzione della funzione. –
E si può facilmente verificare che la funzione non sia * copiata * come 'button1.onclick = buttonClicked; console.log (button1.onclick === buttonClicked); 'funzioni sono oggetti e i confronti di uguaglianza tra oggetti restituiscono true solo se entrambi i riferimenti puntano allo stesso oggetto. –