在 Google Closure Compiler 中我收到警告
警告 - 全局 this 对象的危险使用
这是一个例子。错误行和偏移量指的是单词的开头this
function aToggle() {
if(shown)
toggle.show()
else
toggle.hide()
$(this).text(shown ? 'Click to hide' : 'Click to show')
shown = !shown
}
link.onclick = aToggle
我只是将其更改为匿名方法,但我正在重复使用aToggle
文件中的其他位置,因此需要对其进行命名。
我可以标记aToggle
as /**@constructor*/
——但它不是构造函数。是否有另一个注释可以用来消除此警告,或者我是否陷入将其标记为构造函数或显示一堆无用警告之间?
Edit:我一直在阅读 Closure: The Definitive Guide,我刚刚意识到您可以简单地添加/** @this {Element} */注解在你的事件处理程序之前让闭包编译器停止抱怨。
See the 关闭编译器警告参考。当您使用时,闭包编译器会发出此警告this
在没有注释的函数中/** @constructor */
或在prototype
一个类的。编译器假设你永远不会使用this
当一个函数在另一个对象的上下文中被调用时(这就是事件回调所做的)。
您可能需要更改一些地方才能使闭包编译器停止抱怨此警告:
- 不要使用
link.onclick = ...
直接,因为你必须搞乱this
and e || window.event
。相反,使用 jQuery 来包装事件处理程序,因为jQuery 的事件对象有e.currentTarget.
- 如果您正在使用
this
在一个jQuery.each
, 代替this
与函数的第二个参数。例如。,jQuery.each([1, 2, 3], function(i, val) { ... val ... };
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)