4 различных сценария "этого". Какая правильная интерпретация?

Это взято из туториалов. - Премиум-учебники по Jquery.
http://tutsplus.com/lesson/the-this-keyword/ Джефф каждый раз объясняет, что имеет в виду «это», но я не уверен, что понял причину их всех.

1

function doSomething(e) { 
e.preventDefault(); 
console.log(this);
} 

$('a').on('click', doSomething);

В данном случае "this относится к элементу 'a'" (в данном случае являющемуся родительским объектом)

Думаю, это потому, что здесь оператор равен:

$('a').on('click', function (e) { 
    e.preventDefault(); 
    console.log(this);
    } 

Итак, 'a' является родительским объектом

Например 2

var obj = { 
    doIt: function(e){ 
    e.preventDefault(); 
    console.log(this);
    }
}

$('a').on('click',  obj.doIt);

В данном случае "это по-прежнему относится к элементу 'a'" (*но, видимо, это не родительский объект?)

Кажется, на этот раз мы вызываем метод, но оператор по-прежнему приравнивается к тому же вещь как например 1

*Одна вещь в туториале меня немного смутила. Я думал, что «это» всегда относится к родительскому объекту, поэтому в этом случае «а» по-прежнему является родительским объектом. Но (в 05.23 в учебнике) он делает вывод, что это не так, заявляя, что «могут быть случаи, когда вы хотите, чтобы «это» ссылалось на его родительский объект, который был бы «obj»», и в этом случае он создает, например, 3.

3

var obj = { 
    doIt: function(){ 
    console.log(this);
    }
}

$('a').on('click',  function(e){    
obj.doIt(); 
        };
e.preventDefault(); 

В данном случае «this относится к объекту obj»

Я предполагаю, что это связано с тем фактом, что «this» находится во вложенной функции, так как это утверждение равнозначно:

$('a').on('click',  function(){    
function(){ console.log(this);}
};
e.preventDefault(); 

Я действительно не понимаю, почему хотя, особенно когда я читал в статье, что во вложенных функциях this «теряется и ссылается на головной объект (объект окна)».

E.g.4

var obj = { 
    doIt: function(){ 
    console.log(this);     
    }
}

$('a').on('click',  function(e){    
       obj.doIt.call(this);             
       e.preventDefault(); 
});

В этом случае «Это относится к 'a'»

Согласно Javascript Definitive Guide «Первый аргумент обоих call() — это объект, для которого должна быть вызвана функция» Здесь «это» используется в качестве первого аргумента.Но «это» не является объектом, для которого должна быть вызвана функция??
Я думаю, что понимаю, что функция вызова предназначена для вызова функции и использования ее первого параметра в качестве указателя на другой объект, но я не понимаю, почему использование «этого» означает, что функция вызывается «а». Это не то, что я видел в других примерах call().

Извините за такой громадный пост. Надеюсь, кто-то еще читает на этом этапе…

7
задан fivedoor 12 April 2012 в 00:35
поделиться