this指向当前作用域的对象,如果找不到,往上一层找,直到window。
this 关键字很好用,很灵活,正因为很灵活,所以一不小心你就会掉进陷阱,所以你要注意以下几点:
- 元素对象的this,始终指向该元素,如事件绑定。
- 全局的this或者window的相关方法的this始终指向window对象,如setTimeout(function(){alert(this);}, 10)。
- 自己创建的对象({}, new function等)里的this指向自己对象,如var obj = {xxx: function(){alert(this);}}
- 匿名函数的this,始终指向window对象,如(function(){alert(this);})();
- 想不到还有什么了,望达人补充。
遇到在某function里不能正常使用this时,可以用call或者在其正常的作用域里var _this = this;然后用_this,最鹾的就是直接用对象名来调用。
另给自己定义的对象都应该创建一个属于该对象的 toString方法。
本博客所有文章遵循创作共用版权协议,要求署名、非商业、保持一致。转载时请先阅读以上许可协议,并以超链接形式注明出处。
这篇文章发表于2009年01月18日 02:00:45, 并被分类于HTML/CSS/JS/PHP. 您可以通过订阅 RSS 2.0 跟踪对这篇文章的评论, 也可以发表你的评论, 或者在您自己的网站中引用(trackback)该篇日志.
已有 5 条评论
搭配着再深入了解下apply() 和 call()。就会更清楚些。
很多情况下,不想让 setTimeout this 指向 window ,可以考虑这样写:
var scope = {};
var f = function(){alert(this)};
setTimeout(function(){f.call(scope);}, 500);
这样就指向 scope 了。
apply和call就是让前面fn里的this指向被apply和被call的那个对象的。
这两天在整理关于事件绑定的几种方法关于this的不同,发现事件绑定函数里的this也不全是指向元素本身的。
apply和call就是让前面fn里的this指向被apply和被call的那个对象的。
这两天在整理关于事件绑定的几种方法关于this的不同,发现事件绑定函数里的this也不全是指向元素本身的。
[...]http://www.macji.com/2009/01/18/javascript-this-keyword-tips/[...]