1.普通函数中this指向window
function fn(){
console.log(this);
};
fn();//输出window对象
2.构造函数中this指向新创建的对象
let Student=function(){
this.name='张三'
}
let stu1=new Student();
console.log(stu1.name);//控制台输出张三
3.事件处理程序中,this指向事件源
$(document).click(function(){
console.log(this);//控制台输出#document对象
})
4.定时器中this指向window
setInterval(function(){
console.log(this);//每间隔一秒输出一次window对象
},1000)
5.对象的方法中this指向调用者
let obj={
name:'张三',
age:20,
running:function(){
console.log(this);//控制台输出obj这个对象
}
}
obj.running();
附:更改this指向的几种方法
1.在外部定义一个变量来存放this
let that=this;
setInterval(function(){
console.log(that);
},1000)
2.1 call方法【 函数被借用时, 会立即执行, 并且函数体内的this会指向调用者】
function fn(name, age) {
this.name = name;
this.age = age
}
let obj = {};
fn.call(obj, '李四', 20);
2.2 apply方法【 函数被借用时, 会立即执行, 并且函数体内的this会指向调用者,与call不同的是,apply只能有两个参数,第二个参数必须用[]包裹】
function fn(name, age) {
this.name = name;
this.age = age
}
let obj = {};
fn.apply(obj, ['李四', 20]);
2.3 bind方法【 函数被借用时,不会立即执行,而是返回一个函数,需要自己手动调用】
function fn(name, age) {
this.name = name;
this.age = age
}
let obj = {};
fn.bind(obj, '李四', 20)();