2013-08-18 3 views
2
var obj = {  
    doIt : function(){ 
     console.log(this) 
    } 
} 
$('a').on('click', function(){ 
    obj.doIt(); // this now refers to object  
}); 

$('a').on('click', obj.doIt); // this refers to anchor tag. 

В первом случае , это относится к объекту, но в второго случая это относится к якорь тег. Почему это изменяется на объект обратно, когда мы вызываем функцию внутри другой функции и почему ?.Объем этой ссылки в jquery?

+0

Поскольку значение ['this'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this) зависит от вызова функции - у него нет" scope " – Bergi

ответ

1

this управляется с помощью jQuery, чтобы вы могли легко получить доступ к элементу DOM, который был выбран или чье событие было запущено. Это может, очевидно, вызвать проблемы, связанные с применением методов объекта, поскольку контекст this потерян.

Посмотрите на метод jQuery's .proxy(). Это позволит вам охватить this для ссылки на контекст obj.

$("a").on("click", $.proxy(obj.doIt, obj)); 

Чтобы понять разницу в вашей ситуации, вы должны понимать, что функция ссылается как второй аргумент (или третий ...) к методу .on() применяется/вызывается в контексте элемента DOM. То есть внутри функции относится к элементу. Однако в первом примере вы просто вызываете свой метод obj.doIt() без какого-либо предустановленного контекста, поэтому this относится к obj.

+0

Я знал о методе proxy(), его несколько похожем на языке JS-вызове и методе apply. как получилось, что значение этого изменилось, когда его внутри вызова функции ?. – theJava

+0

Обновлено :) - может быть, это объясняет это лучше. –