js的this指向是不确定的,也就是说是可以动态改变的。call/apply 就是用于改变this指向的函数,这样设计可以让代码更加灵活,复用性更高。
<input id="test" type="button" value="按钮" onClick="test()"/>
function test(){alert(this)}
使用标签属性注册事件 此时this 指向的是 window 对象
使用 addEventListener 等注册。此时this 也是指向 input
document.getElementById("test").addEventListener("click",test);
division element
var div = document.getElementById('elmtDiv');
div.attachEvent('onclick', sum);
function sum()
{
// 在此使用this
}
// -->
division element
var div = document.getElementById('elmtDiv');
div.attachEvent('onclick', sum);
function sum()
{
// 在此使用this
}
这时的sum()方法中的this关键字,指示的对象是IE的window对象。这是因为sum只是一个普通的函数,对于attachEvent后,脚本引擎对它的调用和div对象本身没有任何的关系。同时你可以再看看sum的caller属性,它是等于null的。