this 是什么 ?
this是包含它的函数 作为方法被调用时 所属的对象。
function arr(){
console.log(this); //window
}
arr(); //window
this 指向 window 的情况
全局下调用函数: this指向window
function foo() {
console.log(this); // window
}
foo();
定时器与延时器中的this
setInterval(function () {
console.log(this); // window
});
setTimeout(function () {
console.log(this); // window
});
自执行函数
(function () {
console.log(this); // window
})()
闭包
function arr() {
return function () {
console.log(this); // window
}
}
var boo = arr();
boo(); // 最后是window调用了这个函数
改变 this 指向的三种方法
通常情况下,我们想使用其它环境变相下的状态,这就需要借助this来实现,常用改变this指向的有以下几种方式可以实现
call()
语法:
函数.call(this, 参数1, 参数2, ...)
会立即执行该函数
var arr = {
name: '胖子',
fn(a, b) {
console.log(this.name, a, b); // 瘦子 a b
}
}
var abb = {
name: '瘦子',
}
arr.fn.call(abb, 'a', 'b'); //瘦子 a b
apply()
语法:
函数.apply(this, [参数1, 参数2, ...])
会立即执行该函数
var arr = {
name: '胖子',
fn(a, b) {
console.log(this.name, a, b); // 瘦子 a b
}
}
var abb = {
name: '瘦子',
}
arr.fn.apply(abb, 'a', 'b'); //瘦子 a b
bind()
函数.bind(this, 参数1, 参数2,...);
不会立即执行,返回一个新的函数,函数体内的this指向传入的对象,参数以逗号隔开,并且会自动拼接, bind 跟call相似,只不过后面多了个 ()