避免使用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方法。