如下所示, 得到的结果里面, 第二个this指向的是window这个全局对象而非f2, 原因就是多层this造成的指向不明引起的.
var a = { f1: function(){ console.log(this); var f2 = function(){ console.log(this); }; f2(); } }; a.f1(); // Object // Object
上面这段代码的实际运行效果其实是这样的:
var test = function(){ console.log(this); } var a = { f1: function(){ console.log(this); var f2 = test; f2(); } }; a.f1(); // Object // Object
但我们需要的效果是他指向a对象, 而不是window, 解决方法是通过另一个变量将this固定住:
var a = { f1: function(){ console.log(this); var self = this; var f2 = function(){ console.log(self); }; f2(); } }; a.f1(); // Object // Object
这里使用了一个变量: self, 将a对象的this固定住, 利用函数作用域可以访问父级作用域内变量这一特点, 实现this的传递.