Javascript jQuery回调-严格违反
我大致了解了Javascript jQuery回调-严格违反,javascript,jquery,callback,this,strict,Javascript,Jquery,Callback,This,Strict,我大致了解了这个在严格模式下不使用方法的基本概念,但老实说,它有点博学。因此,用更平淡的术语来说: 我有一个这样的处理程序: $('.myClass').one('keyup', function() { var $this = $(this); etc etc }); 我想将其更改为: function myFunction () { var $this = $(this); etc etc }; $('.myClass1').one('keyup', myF
这个
在严格模式下不使用方法
的基本概念,但老实说,它有点博学。因此,用更平淡的术语来说:
我有一个这样的处理程序:
$('.myClass').one('keyup', function() {
var $this = $(this);
etc etc
});
我想将其更改为:
function myFunction () {
var $this = $(this);
etc etc
};
$('.myClass1').one('keyup', myFunction);
$('.myClass2').one('keyup', myFunction); etc
它不喜欢它,因为在严格模式下
,因为我在方法之外使用这个
。我明白了
但是,我需要将myFunction
与处理程序分离,因为(1)它连接到各种类/元素,并且(2)我正在使用.off().one('keyup',myFunction)
在不同点为各种类重置一个处理程序
那么,如何在不违反this
业务的情况下使用单独的回调函数呢
我得到的基本想法,这不是在一个方法时,在严格的模式
是的,但是您混淆了两个不相关的东西:严格模式和JSLint。它们在很大程度上是不相关的(除了JSLint有一个要求严格模式的选项)
严格模式下的代码没有问题。它是完全有效和适当的(因为jQuery如何使用this
)。那里没有严格违反
JSLint不喜欢它,但是JSLint不喜欢很多完全有效和适当的东西。JSLint检测到一系列被广泛认为是问题的东西(比如缺少分号),以及Douglas Crockford从风格角度不喜欢的东西。克罗克福德聪明且见多识广,但并非所有人都同意他的风格选择
Lint工具非常有用,是工具包的重要组成部分。在我看来,JSLint并没有它可能的那么有用,因为它将实质性问题与样式问题混为一谈(尽管承认它与JavaScript的关系很好)。你可以考虑使用一个能让你对它检查的东西有更多控制的叉。 < P>你不能使用事件对象吗?< /P>
i、 e
示例:您可以读取通过的事件对象的currentTarget,如:
function myFunction (event) {
var $this = $(event.currentTarget);
etc etc
};
$('.myClass1').one('keyup', myFunction);
$('.myClass2').one('keyup', myFunction); etc
试试这个
function myFunction () {
var $this = $(this);
etc etc
};
var obj= $('.myClass1');
obj.myFunction =myFunction ;
obj.one('keyup', myFunction);
obj.one('keyup', myFunction); etc
您链接到的问题的公认答案建议使用函数表达式替换函数语句。你试过了吗?在函数中使用它没有什么错。考虑到“方法”并不真正属于对象(它们只是引用某个地方定义的函数的属性,可能与其他对象共享),我看不出有什么异议。这真的很有帮助。我使用Aptana的内置JSLint,错误“严格违反”听起来非常。。。权威:)@Nick:Ack!事实上,我没有意识到它的措辞是这样的(但快速查看一下jslint.com就可以证实这一点)。经典Crockford…:-)jQuery docs说,并非总是这样:event.target
表示事件发生的最深(最里面)元素,因此如果事件是从子元素冒泡而来,则该可能不等于event.target
。
function myFunction () {
var $this = $(this);
etc etc
};
var obj= $('.myClass1');
obj.myFunction =myFunction ;
obj.one('keyup', myFunction);
obj.one('keyup', myFunction); etc