在前面的文章里提到了this叫潦,今天就詳細的說下吧祟蚀。
怎么判斷this是指向誰的--誰調(diào)用了這個方法這個this就指向誰
在創(chuàng)建一個對象的時候有this可霎,那他到底是什么?
function Person(name){
this.name = name;
console.log(this);
}
var zhaobw = new Person("zhaobw");
console.log(zhaobw);
運行后得到的結(jié)果:
得出一個結(jié)論:this指向的是生成的對象密强。
- 誰創(chuàng)建的對象就指向誰茅郎。
那普通的函數(shù)函數(shù)的this指向誰?
function test(){
console.log(this);
}
test();
運行后得到的結(jié)果
得出一個結(jié)論:
- 普通的函數(shù)的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指向誰毕谴?
記住一句話,這個方法誰調(diào)用就指向誰距芬。
為了方便理解:我們可以這么看--用call看
fun.call(context,p1,p2);//context就是this涝开,誰調(diào)用的。p1框仔,p2就是函數(shù)參數(shù)
舉個例子
function test(){}
test();
等同于
function test(){}
test.call(undefined,p1,p2);
重點來了舀武,this就是undefined。在瀏覽有個規(guī)則就是context如果是null或者undefined离斩,那么就會默認為window银舱。
然后其他的就用這個方法去套,就好了跛梗。
最后在說兩句
- new constructor()==>this指向生成對象
- 方法調(diào)用{a:1,b:2,c:function(){}}==>指向調(diào)用方
- 函數(shù)調(diào)用==>指向全局對象
- apply/call==>指向第一個參數(shù)寻馏。