Почему я должен использовать анонимную оболочку для этой цепочки jQuery?

У меня есть:

$('p').fadeOut(300, function() { $(this).remove(); });

Но почему я не могу это сделать ?:

$('p').fadeOut(300, $.fn.remove);
$('p').fadeOut(300, $().remove);
var p = $('p'); p.fadeOut(300, p.remove);
0
nl ja de
@Jack Я передаю ему функцию.
добавлено автор mxcl, источник
Потому что он ожидает функцию?
добавлено автор Jack, источник

1 ответы

$ ('p'). fadeOut (300, $ .fn.remove);

$.fn.remove is passed with no context. $.proxy($.fn.remove, $("p")) would work here

$('p').fadeOut(300, $().remove);

без контекста. $. proxy ($ (). remove, $ ("p")) будет работать здесь

p.fadeOut(300, p.remove);

без контекста. $. proxy (p.remove, p) будет работать здесь

Так что исправление кода:

$('p').fadeOut(300, $.proxy($.fn.remove, $("p")));
$('p').fadeOut(300, $.proxy($().remove, $("p")));
var p = $('p'); p.fadeOut(300, $.proxy(p.remove, p));

http://jsfiddle.net/gtv85/

5
добавлено
@MaxHowell, когда вы передаете какую-либо функцию голым где-то, она потеряет любой контекст, когда его вызывают на другом конце. Они назовут его как fn() <- нет вызова метода, поэтому контекста нет. $. proxy и Функция # bind работают вокруг этого, возвращая функцию с постоянно связанным контекстом.
добавлено автор Esailija, источник
Да, это правильно. Я ожидал, что это сработает, потому что контекст - это элемент, но это не элемент, обернутый jQuery. Благодарю.
добавлено автор mxcl, источник
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda