Управление значением 'этого' в событии jQuery

Я бы создал фиктивный проект с именованной зависимостью как единственной зависимостью. Затем вы можете выполнить mvn dependency:copy-dependencies, чтобы скопировать все (транзитивные) зависимости в определенную папку.

72
задан pb2q 12 February 2015 в 17:03
поделиться

4 ответа

Я не думаю, что jQuery имеет встроенную функцию этого. Но Вы могли использовать конструкцию помощника как следующее:

Function.prototype.createDelegate = function(scope) {
    var fn = this;
    return function() {
        // Forward to the original function using 'scope' as 'this'.
        return fn.apply(scope, arguments);
    }
}

// Then:
$(...).bind(..., obj.method.createDelegate(obj));

Таким образом, можно создать динамические 'функции обертки' с createDelegate (), которые называют метод с данным объектом как его 'этот' объем.

Пример:

function foo() {
    alert(this);
}

var myfoo = foo.createDelegate("foobar");
myfoo(); // calls foo() with this = "foobar"
21
ответ дан Ferdinand Beyer 24 November 2019 в 12:30
поделиться

jQuery не поддерживает, связывает, и предпочтительный путь состоит в том, чтобы использовать функции.

, поскольку в JavaScript, this.availableCategoryClick не означает вызывать availableCategoryClick функцию на этом объекте, jQuery советует для использования этого предпочтительного синтаксиса:

var self = this;
jQuery('#available input', self.controlDiv).bind('click', function(event)
{
   self.availableCategoryClick(event);
});

понятия OO в JavaScript трудно понять, функциональное программирование часто легче и более читаемо.

2
ответ дан Vincent Robert 24 November 2019 в 12:30
поделиться

Видя, что объем изменений функций, наиболее распространенный способ состоит в том, чтобы сделать это вручную с чем-то как var self = this.

var self = this

$('.some_selector').each(function(){
  // refer to 'self' here
}
1
ответ дан August Lilleaas 24 November 2019 в 12:30
поделиться

Мне нравится ваш способ, на самом деле я использую подобную конструкцию:

$('#available_input').bind('click', {self:this}, this.onClick);

и первую строку this.onClick:

var self = event.data.self;

Мне нравится этот способ, потому что тогда вы получаете и элемент кликнул (как этот), и "этот" объект как себя, без необходимости использовать замыкания.

.
38
ответ дан 24 November 2019 в 12:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: