Они взяты из учебников Jquery vid для премиум-класса.
http://tutsplus.com/lesson/the-this-keyword/ Джефф объясняет, что это такое, каждый раз, но я не уверен, что понял их все.4 разных сценария «этого». Какая правильная интерпретация?
E.g. 1
function doSomething(e) {
e.preventDefault();
console.log(this);
}
$('a').on('click', doSomething);
В этом случае «это относится к„а“элемента» (будучи в этом случае родительский объект)
Я предполагаю, что это потому, что здесь утверждение приравнивает к:
$('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);
В этом случае «это по-прежнему относится к„а“элемента» (* но, видимо, это не родительский объект?)
Кажется, на этот раз мы вызываем метод, кроме утверждение все равно приравнивается к тому же, что и Eg 1
* Одна вещь в учебнике меня немного смутила. Я думал, что «это» всегда относится к родительскому объекту, поэтому в этом случае «a» все еще является родительским объектом. Но (в 05.23 в учебнике) он говорит, что это не так, заявив, что «могут быть моменты, когда вы хотите« это »ссылаться на его родительский объект, который был бы« obj », в каком случае он создает, например, 3.
E.g. 3
var obj = {
doIt: function(){
console.log(this);
}
}
$('a').on('click', function(e){
obj.doIt();
};
e.preventDefault();
В этом случае «это относится к OBJ объекта»
Я полагаю, что это с тем, что «это» находится в вложенной функции, как это утверждение эквивалентно:
$('a').on('click', function(){
function(){ console.log(this);}
};
e.preventDefault();
Я действительно не понимаю, почему, особенно, когда я читал в статье, что в вложенных функциях «это» теряет свой путь и относится к головному объекту (объекту окна) ».
ЭГ4
var obj = {
doIt: function(){
console.log(this);
}
}
$('a').on('click', function(e){
obj.doIt.call(this);
e.preventDefault();
});
В этом случае «Это относится к„а“»
Согласно Javascript Definitive Guide «Первый аргумент как вызов() является объект, на котором функция должна быть вызвана » Здесь« это »используется как первый аргумент. Но «это» не является объектом, на который должна вызываться функция?
Я думаю, что я получаю, что функция вызова есть, чтобы вызвать функцию и использовать свой первый параметр как указатель на другой объект, но я не понимаю, почему использование 'this' означает, что функция вызывается 'a'. Это не то, что я видел в других вызовах().
Извините за такой мамонт.Надеюсь, кто-то еще читает эту сцену ...
+1 потому что мне слишком поздно начинать отвечать к этому замечательному вопросу. Несомненно, кто-то еще скоро - это жизненно важный момент и тот, который, как правило, плохо освещен в учебниках JS. – jimw
* «Я думал, что« это всегда относится к родительскому объекту ... »* Нет, не думайте о' this' как о родительском объекте. Подумайте об этом как о вызывающем контексте *, значение которого может быть задано несколькими различными способами, одним из которых является вызов метода из объекта. –