在前面的文章里提到了this,今天就详细的说下吧。
怎么判断this是指向谁的--谁调用了这个方法这个this就指向谁
在创建一个对象的时候有this,那他到底是什么?
function Person(name){
this.name = name;
console.log(this);
}
var zhaobw = new Person("zhaobw");
console.log(zhaobw);
运行后得到的结果:
得出一个结论:this指向的是生成的对象。
- 谁创建的对象就指向谁。
那普通的函数函数的this指向谁?
function test(){
console.log(this);
}
test();
运行后得到的结果
得出一个结论:
- 普通的函数的this指向window
setTimeout、setInterval
document.addEventListener('click', function(e){
console.log(this);//this 指向doucment
setTimeout(function(){
console.log(this);//this 指向window
}, 200);
}, false);
这两个的方法是指向window
看了上面的例子,是不是晕了。代码的情况那么多。我怎么知道this指向谁?
记住一句话,这个方法谁调用就指向谁。
为了方便理解:我们可以这么看--用call看
fun.call(context,p1,p2);//context就是this,谁调用的。p1,p2就是函数参数
举个例子
function test(){}
test();
等同于
function test(){}
test.call(undefined,p1,p2);
重点来了,this就是undefined。在浏览有个规则就是context如果是null或者undefined,那么就会默认为window。
然后其他的就用这个方法去套,就好了。
最后在说两句
- new constructor()==>this指向生成对象
- 方法调用{a:1,b:2,c:function(){}}==>指向调用方
- 函数调用==>指向全局对象
- apply/call==>指向第一个参数。