this指向问题
提到this指向,第一句想到的就是谁调用就指向谁!
具体如下:
- 浏览器里,在全局范围内的this 指向window对象;
- 在函数中,this永远指向最后调用他的那个对象;
- 构造函数中,this指向new出来的那个实例对象;
- 通过事件绑定的方法, 此时 this 指向绑定事件的对象;
- 定时器函数, 此时 this 指向 window
改变this指向的方法
bind,apply,call
bind
bind可以改变this指向,如果要调用,后面要加(),不会改变数据,需要在调用的地方加一个括号
var obj = {
a = 1
}
function fn1() {
console.log(this)
}
fn1.bind(obj)(1,2)
apply
apply可以改变this指向,可以直接调用函数,但是参数要放到数组内
var obj = {
a = 1
}
function fn1() {
console.log(this)
}
fn1.apply(obj,[1,2])
call
call可以改变this指向,可以直接调用函数,参数是单个使用的
var obj = {
a = 1
}
function fn1() {
console.log(this)
}
fn1.apply(obj,1,2)