避免使用javascript的最佳方法';s";这";错误

避免使用javascript的最佳方法';s";这";错误,javascript,this,Javascript,This,在某些情况下,this关键字可能不会引用我期望的对象。(最近的例子: 避免这种错误的最佳方法是什么 现在,我总是使用jQuery中的$.fn来存储变量,但我不确定这是否是最好的方法。了解这个的行为方式和原因,然后阅读您正在处理的代码 不要相信一些神奇的功能,如果你不知道/不阅读代码,你可能会得到意想不到的结果 对于这个“问题”,根本没有一个令人敬畏的解决方案。不要避免使用它。只要正确使用它。Javascript是一种基于原型的面向对象语言。如果使用对象原型创建对象,则应始终知道这指的是什么 jQ

在某些情况下,
this
关键字可能不会引用我期望的对象。(最近的例子:

避免这种错误的最佳方法是什么


现在,我总是使用jQuery中的
$.fn
来存储变量,但我不确定这是否是最好的方法。

了解
这个
的行为方式和原因,然后阅读您正在处理的代码

不要相信一些神奇的功能,如果你不知道/不阅读代码,你可能会得到意想不到的结果

对于这个“问题”,根本没有一个令人敬畏的解决方案。

不要避免使用它。只要正确使用它。Javascript是一种基于原型的面向对象语言。如果使用对象原型创建对象,则应始终知道这指的是什么

jQuery.fn与
jQuery.prototype
jQuery.fn
只是一个别名。您还可以使用instanceof检查this关键字

this instanceof jQuery
另一种常见做法是调用一个方法并在此时使用
apply
call
函数方法绑定上下文。这将保证函数在该上下文中的可用性

下面是一个简单的例子

var div = document.getElementById('div1');
function sayId(){
    alert(this.id);
}
sayId.call(div); // alerts div1
call方法的第一个参数绑定此上下文并运行函数


知道如何控制和检查
这个
是避免常见错误的最好方法。

你问题的第一句话说得最好:
这个
是一个关键字,不是变量。我现在使用的一个好方法是始终为函数传递一个参数“self”。Python就是这样做的。+100我不同意“this”是个问题,我讨厌Crockford说服这么多人不要使用它。我想知道,如果我有
div
元素,为什么要使用
sayId.call(div)
而不是
div.sayId()
?sayID不是在DOM元素上定义的方法。相反,它是仅在当前变量范围内定义的函数声明。要将特定调用上下文应用于独立函数,必须使用function.prototype.call或function.prototype.apply方法。