这些取自 tuts-premium Jquery vid 教程。
http://tutsplus.com/lesson/the-this-keyword/
Jeff 每次都解释“this”指的是什么,但我不确定我是否掌握了所有这些背后的原因。
例如 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);
在这种情况下,“this 仍然指代 'a' 元素”(* 但显然它不是父对象?)
这次我们似乎在调用一个方法,但该语句仍然等同于与 Eg 1 相同的东西
*教程中的一件事让我有点困惑。我认为'this'总是指父对象,所以在这种情况下'a'仍然是父对象。但是(在教程中的 05.23 处)他推断情况并非如此,并指出“有时您可能希望 'this' 引用它的父对象,这将是 'obj'”,在这种情况下,他创建了 eg3。
例如 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”“迷失方向并引用头对象(窗口对象)”时。
例4
var obj = {
doIt: function(){
console.log(this);
}
}
$('a').on('click', function(e){
obj.doIt.call(this);
e.preventDefault();
});
在这种情况下“这指的是'a'”
根据 Javascript Definitive Guide “call() 的第一个参数是要在其上调用函数的对象”这里“this”用作第一个参数。但是“this”不是要在其上调用函数的对象??
我想我知道调用函数是用来调用函数并将其第一个参数用作指向不同对象的指针,但我不明白为什么使用“this”意味着函数被“a”调用。这也不是我在其他 call() 示例中看到的。
对不起,这么庞大的帖子。希望这个阶段有人还在阅读……</p>