函数里this指向的总结
this存在两个地方
一个是全局作用域下——this永远指向window对象;第二个是函数作用域下,需分情况讨论,
但是有两条铁律:
一 "this只有在函数被调用的时候才能被确定指向谁,函数定义的时候确定不了",
二 "谁调用的这个函数,函数里的this就指向谁",。
以下均讨论函数体里的this指向。
一 构造函数里的this
function Foo(){
this.name = "susan";//this指向girl
}
var girl = new Foo();
二 对象的方法里的this
var obj = {
fn: function() {
console.log(this);//obj调用的fn,this指向obj
}
}
obj.fn();
三 函数被call或apply调用时,函数里的this
function fn() {
console.log(this);//this指向obj
}
fn.call(obj,x,y);
四 函数被当做事件处理函数时,函数里的this
button.addEventListener("click",fn);
fn() {
console.log(this);//this指向触发事件的元素,这里指向button
}
***注意***
一些浏览器在使用非addEventListener函数(如直接在元素上onclick="fn()")动态监听事件时不遵守这个约定
五 被普通函数调用时,函数里的this
fn1() {
console.log(this);//this指向window
fn2();
}
fn2() {
console.log(this);//指向fn1函数里的this,这里等于window
}
fn1();