如下js代码:
A:
<script>
window.onload=function(){
document.getElementById("a").onchange=function(){
alert(this==window);
}
}
</script>
<input type="text" id="a"/>B:
<script>
function aa(){
alert(this==window);
}
</script>
<input type="text" id="a" onchange="aa()"/>
想请教各位,这两段代码都是为一个html元素绑定了一个事件,但是我发现,A方式绑定后,方法中的this指的是html元素自身,而B方式中的this指向的却是window对象,不知道这两种绑定事件的方式有什么不同,他们的机制又是怎样的呢?
A:
<script>
window.onload=function(){
document.getElementById("a").onchange=function(){
alert(this==window);
}
}
</script>
<input type="text" id="a"/>B:
<script>
function aa(){
alert(this==window);
}
</script>
<input type="text" id="a" onchange="aa()"/>
想请教各位,这两段代码都是为一个html元素绑定了一个事件,但是我发现,A方式绑定后,方法中的this指的是html元素自身,而B方式中的this指向的却是window对象,不知道这两种绑定事件的方式有什么不同,他们的机制又是怎样的呢?
onchange="//一些代码"
效果等同于
document.getElementById("a").onchange=function(){
//那些代码
}所以 onchange="aa()" 等同于
document.getElementById("a").onchange=function(){
aa();
}而此时 aa的运行者已经不是document.getElementById("a")了所以,
document.getElementById("a").onchange=function(){
//this==window 这里为false
aa(); //但在aa中运行 this==window 的时候,为true
}
alert(this==window);
}
在函数中,this只的是该函数的调用者。函数如果没有被赋给html元素,它的调用者就是window;否则就是元素本身。
第二个, function aa(){} 这里用的this就是window咯,
js中的this是指向包含此this对象的function运行的那个对象