除去不常用的 with 和 eval 的情况,具体到实际应用中, this 的指向大致可以分为以下 4种。
作为对象的方法调用。
作为普通函数调用。
构造器调用。
Function.prototype.call 或 Function.prototype.apply 调用
this的坑
window.name = 'globalName'; var myObject = { name: 'sven', getName: function(){ return this.name; } }; var getName = myObject.getName; console.log( getName() ); // globalName
有时候我们会遇到一些困扰,比如在 div 节点的事件函数内部,有一个局部的 callback 方法,
callback 被作为普通函数调用时, callback 内部的 this 指向了 window ,但我们往往是想让它指向
该 div 节点
<html> <body> <div id="div1">我是一个 div</div> </body> <script> window.id = 'window'; document.getElementById( 'div1' ).onclick = function(){ alert ( this.id ); // 输出:'div1' var callback = function(){ alert ( this.id ); // 输出:'window' } callback(); }; </script> </html>
可以定义 var that = this; 用于保存 div 节点的引用