在某些情况下,this
关键字可能不会引用我期望的对象。 (最近的例子:in an key event, in my XBL)
避免这种错误的最佳方法是什么?
目前,我总是使用jQuery中的$.fn
来存储我的变量,但我不确定它是否是最好的方法。
答案 0 :(得分:10)
了解this
行为的方式和原因,然后阅读您正在处理的代码。
不要相信某些神奇的功能,如果你不知道/不读代码,你可能总会得到意想不到的结果。
对于这个“问题”,没有一个很棒的解决方案。
答案 1 :(得分:3)
请勿避免使用此。只是以正确的方式使用它。 Javascript是一种基于原型的面向对象语言。如果使用对象原型创建对象应始终知道它所指的内容。
jQuery.fn与jQuery.prototype
相同。 jQuery.fn
只是一个别名。您还可以使用instanceof检查this关键字。
this instanceof jQuery
另一种常见做法是使用apply
或call
函数方法调用方法并在当时绑定上下文。这将保证函数的 this 上下文。
这是一个简单的例子。
var div = document.getElementById('div1');
function sayId(){
alert(this.id);
}
sayId.call(div); // alerts div1
call方法的第一个参数绑定 this 上下文并运行该函数。
了解如何控制和检查 this
是避免常见错误的最佳方法。