Вопрос

Я получаю основное представление о this не находясь в 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 бизнес?

Это было полезно?

Решение

Я получаю основную идею о том, что это не относится к методу, когда он находится в строгом режиме...

Да, но вы путаете две несвязанные вещи:Строгий режим и JSLint.Они в значительной степени не связаны (за исключением того, что в JSLint есть возможность требовать строгий режим).

В строгом режиме с вашим кодом проблем нет.Это совершенно допустимо и уместно (из-за того, как использует jQuery this). Пример Есть нет там "строгое нарушение".

JSLint это не нравится, но JSLint не нравится многое из того, что совершенно допустимо и уместно.JSLint обнаруживает комбинацию вещей, которые, по общему признанию, являются проблемами (например, пропущенные точки с запятой), и вещей, которые Дугласу Крокфорду не нравятся с точки зрения стиль перспектива.Крокфорд умен и хорошо информирован, но не все согласны с его выбором стиля.

Инструменты для удаления ворса очень полезны и являются неотъемлемой частью инструментария.JSLint менее полезен, чем мог бы быть (на мой взгляд), поскольку связывает проблемы с содержанием с проблемами стиля (хотя, конечно, с JavaScript это тонкая грань).Вы могли бы рассмотреть возможность использования JSHint - синт, вилка, которая дает вам больше контроля над тем, что она проверяет.

Другие советы

Разве вы не можете вместо этого использовать объект event?

т.е.

function myFunction (e) {
    var $this = $(e.currentTarget);
};

Пример: http://jsfiddle.net/gRoberts/cRnb3/

вы могли бы прочитать currentTarget объекта event, переданного через, например:

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top