Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery回调-严格违反_Javascript_Jquery_Callback_This_Strict - Fatal编程技术网

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