Что мне сойдет с рук, когда дело доходит до синтаксиса jQuery? - PullRequest
0 голосов
/ 17 декабря 2011

Я вижу, это используется много:

$("img").hide( 800, function() {
    $(this).show();
});

... но можем ли мы получить такой же эффект, как это:

$("img").hide( 800, "$(this).show();" );

Я вижу, это часто используется:

$(this).hide();

... но можем ли мы получить такой же эффект, как этот:

this.hide();

... как насчет этого?:

$("this").hide();

Я вижу, это использовало много:

element.click(function() {
    notify();
});

... но можем ли мы получить такой же эффект, как этот:*

element.click(notify);

Моя точка зрения:

Существуют ли более простые версии обычных методов jQuery, которые мы обычно используем?

Ответы [ 3 ]

1 голос
/ 17 декабря 2011

... но можем ли мы получить такой же эффект, как этот:

$ ("img"). Hide (800, "$ (this) .show ();");

Хм, нет, ты не можешь.Если второй аргумент hide является строкой, то это должно быть замедление, а "$(this).show();" не является замедлением;так что $("img").hide( 800, "$(this).show();" ); просто добавит непонятные ошибки в вашу консоль и даже не будет ничего скрывать.

Если вы видите это:

$(this).hide;

использовал много, то вы ищетемного бесполезного кода, и вы должны начать смотреть на лучший код.$(this).hide; не делает ничего полезного, возможно, он будет использовать алгоритмы удаления мертвого кода вашего движка JavaScript, но он, безусловно, ничего не скроет на странице.Сказать $(this).hide; не более продуктивно, чем сказать 42;;конечно, они оба являются юридическими утверждениями, но они не делают ничего полезного.

Возможно, вы имели в виду:

$(this).hide();

Но это полностью отличается от this.hide();, если this не являетсяуже объект JQuery.Стандартные объекты DOM не имеют hide методов, поэтому this.hide();, как правило, является ошибкой, тогда как $(this).hide(); скрывает объект DOM и переходит к следующему оператору.

И, наконец, мы добираемся до чего-топо крайней мере, это имеет смысл:

element.click(function() {
    notify();
});
// [...]
element.click(notify);

Функция click просто нуждается в функции обратного вызова, чтобы вы могли дать ей имя функции или анонимную функцию (то есть функцию "литерал"),Аналогично, вы можете сказать pancakes(11); или var eggs = 11; pancakes(11);.

Так что да, вы можете использовать именованную функцию в качестве обратного вызова jQuery;но эти два element.click вызова не эквивалентны.В первом случае:

element.click(function() { notify() });

Значение this внутри notify будет window;во втором случае:

element.click(notify)

this будет DOM-объектом элемента внутри notify.

Возможно, это не так много ответа, но мне нужно больше места, чем комментарийпредлагает указать на всю путаницу в вашем вопросе.

0 голосов
/ 17 декабря 2011

$(this).hide; На самом деле ничего не сделаю, я предполагаю, что вы имеете в виду $(this).hide()?

this.hide(); Вам нужно более глубокое понимание того, как работает jQuery и как работает DOM.$(this) в большинстве случаев переносит значение this, нативный элемент DOM, в объект jQuery.Обычные элементы DOM не имеют метода скрытия.

Например, вы не можете сделать document.getElementsByTagName('body')[0].hide(), потому что элемент тела DOM не имеет метода скрытия.jQuery оборачивает элемент в объект jQuery, который по сути является массивом с множеством интересных методов, таких как hide()

$("this").hide; И, наконец, я думаю, что вам нужно более глубокое понимание того, как работает Javascript.Ключевое слово this является специальным и не имеет отношения к строке "this".

Это неопределенный вопрос, основанный на неправильно понятых принципах, и я думаю, что это очень хороший пример того, почему вы должны сосредоточиться на изучении Javascript,не JQuery.

0 голосов
/ 17 декабря 2011

Ну, на самом деле, эти два разные:

element.click(notify);

element.click(function() {
    notify();
});

Первый будет выполнять функцию уведомления при прохождении через эту строку (проверьте с помощью отладчика). Это также сделает очевидным - прикрепить событие клика. Второй не вызывает notify при присоединении этой функции к событию click.

Что касается других отличий - это не столько различия jQuery, сколько различия синтаксиса Javascript. Здесь есть немало несоответствий - большая их часть связана с поддержкой браузеров и тем, как они фактически реализуют официальный ECMAscript, DOM и другие расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...