我在this
概述here时得到method
不在strict mode
的基本想法,但说实话,它有点博学。所以,用更平淡的术语来说:
我有一个像这样的处理程序:
$('.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
它不喜欢它,因为在strict mode
因为我在方法之外使用this
。我知道了。
但是,我需要将myFunction
与处理程序分开,因为(1)它附加到各种类/元素和(2)我使用.off().one('keyup', myFunction)
来重置one
各个阶段的各种类的处理程序。
那么如何在不违反this
业务的情况下绕过单独的回调函数呢?
答案 0 :(得分:6)
我得到的基本想法是,在严格模式下不在方法中......
是的,但是你混淆了两个不相关的东西:严格模式和JSLint。它们在很大程度上是不相关的(除了JSLint可以选择要求严格模式)。
严格模式下的代码没有问题。它完全有效且适当(因为jQuery使用this
)。 Example那里有没有“严格违规”。
JSLint不喜欢它,但JSLint并不喜欢很多完全有效且合适的东西。 JSLint检测到一些被广泛认可的问题组合(例如缺少分号),以及Douglas Crockford从 style 角度看不喜欢的东西。 Crockford聪明而且消息灵通,但不是每个人都同意他的风格选择。
Lint工具非常有用,是工具包的重要组成部分。通过将实体问题与样式问题混为一谈,JSLint的帮助不如它(在我看来)(尽管使用JavaScript认为它很好)。您可以考虑使用JSHint,这是一个可以让您更好地控制其检查内容的分支。
答案 1 :(得分:1)
您不能使用事件对象吗?
即。
function myFunction (e) {
var $this = $(e.currentTarget);
};
答案 2 :(得分:0)
你可以读取传递的event-object的currentTarget,如:
function myFunction (event) {
var $this = $(event.currentTarget);
etc etc
};
$('.myClass1').one('keyup', myFunction);
$('.myClass2').one('keyup', myFunction); etc
答案 3 :(得分:0)
试试这个
function myFunction () {
var $this = $(this);
etc etc
};
var obj= $('.myClass1');
obj.myFunction =myFunction ;
obj.one('keyup', myFunction);
obj.one('keyup', myFunction); etc