最近因为项目需要,学习了一些JavaScript的知识,但是一直对其中的this指针很迷惑。后来和同事讨论并做了一些实践:
<script type="text/javascript">
function dispatch(handler) {
handler.fn();
alert("handler.scope = " + handler.scope);
}
var foo = {
handler: {
fn: function() {
alert("this inside handler is " + this);
},
scope: this
}
};
dispatch(foo.handler);
</script>
运行结果是:
this inside handler is [object Object]
handler.scope = [object Window]
从上面的例子并结合项目代码,我们发现一种查找this所知对象的方法:
1. 首先从this所处的语句出发,向外层找它所属的第1个function
2. 然后继续向外找,找第1个{},那么这个{}对应的对象,就是this指针所指的对象
3. 如果以上两步不能进行,那么this就指向window对象
这个只是一个现象,还需要系统学习下JavaScript,从而找到理论依据。