call、apply和bind都是用来改变this得指向
call 和apply 得区别在于传入的参数形式不一样,call是直接传入参数即可,而apply是以数组的形式传入参数
代码演示
var obj = {
uname: 'h',
}
function fun(age) {
console.log(this, age);
}
//call传入参数不需要数组形式传入
fun.call(obj, 123);
//apply传入参数则需要数组形式传入
fun.apply(obj, [123]);
bind 和 call或apply的区别在于,call和apply他们改变this之后会立即调用函数执行,而bind是改变this指向后不会马上去执行,是将函数返回,则需要我们手动调动
代码演示
var obj = {
uname: 'h',
}
function fun(age) {
console.log(this, age);
}
fun.bind(obj, 123)(); //函数返回在调用
// 上面得写法等同于下面写法
var test = fun.bind(obj, 123);
test()
再我们开发中想让this指向改变,但是并不想让它马上去执行怎么办?这时候就需要用到bind来实现 举个例子如下面定时器 我不想让它马上调用而是等到两秒钟后再去调用。
代码演示
var obj = {
uname: 'h',
}
setTimeout(function() {
console.log(this);
}.bind(obj), 2000)