this指向问题
this指向是调用函数时确定的,调用方式的不同决定了指向不同。
一般是指向函数的调用者。
- 普通函数调用,this指向window
- 构造函数调用,this指向new的对象实例
- 对象方法调用,指向该方法的所属对象
- 事件绑定方法,指向绑定的事件对象
- 定时器函数,指向window
- 立即执行函数,指向window
改变this指向的方法
call()方法
简单理解为调用函数的方式,但可以改变this的指向。经常在继承中出现。
//call()方法,格式call(指向对象,参数)
var obj = {
name:'andy'
}
function foo(){
console.log(this);
}
foo();
foo.call(obj)
apply()方法
因为参数的传递是以数组进行,所以经常跟数组有关系
//apply()方法,格式apply(指向对象,参数),参数使用数组来进行传递
var obj = {
name:'andy'
}
function foo(){
console.log(this);
}
foo();
foo.apply(obj)
bind()方法
不会调用函数,但能改变this指向,返回的是原函数改变this后产生的新函数。
应用场景:不调用函数,但想要改变this指向的。
var obj = {
name:'andy'
}
function foo(){
console.log(this);
}
foo();
var f = foo.bind(obj)//f就为返回的新函数
f()