Является ли event.currentTarget всегда равным $(this) в jQuery?

Является ли эта фраза всегда верной?

$("p").click(function(event) {
  alert( event.currentTarget === this ); 
});  

Один метод предпочтительнее другого? Мне нравится использовать $(this) вместо event.currentTarget, но можно ли улучшить ситуацию в некоторых условиях? Что лучше? Абсолютно то же самое?

И еще один нюанс - когда проверка на firebug console.log(this) и console.log($(this)) дает мне точно такой же элемент. Если они одинаковые - что другое? (поскольку я знаю, что могу написать это $(this).css('color','white'), но не могу написать this.css('color','white')

Ответ 1

Как правило, да, это будет то же самое. Вы можете сделать это по-другому, используя $.proxy для управления контекстом, но на практике вы, вероятно, никогда этого не сделаете.

$(document.body).on('click', $.proxy(function(e) {
    console.log(this);            // window
    console.log(e.currentTarget); // document.body
}, window));

Что касается другого вопроса, this является родным элементом DOM, тогда как $(this) является объектом jQuery, который обертывает этот элемент DOM. Оболочка jQuery означает, что вы можете запускать функции jQuery, такие как css, которые недоступны для собственных элементов DOM.


И, чтобы ответить на точную формулировку вашего вопроса, event.currentTarget обычно равен this, а не $(this).

Ответ 2

Часть вашего ответа выше. Я надеюсь, что это будет достаточно ясно.

Нет console.log(this) и console.log($j(this)) не даст вам того же результата. $(this) преобразует это в объект jQuery и, следовательно, вы можете вызвать методы типа .css, которые могут быть вызваны в объектах jQuery ($ (this)), а не HTML-элементы, которые будут this.

Ответ 3

Это свойство обычно будет равно значению функции.

Если вы используете jQuery.proxy или другую форму манипуляции с областью видимости, это будет равно любому контексту, который вы предоставили, а не event.currentTarget