在js中改变this指向有3个方法
1. call
2. apply
3. bind
1.call方法
// call 第一个可以立即调用函数 第二个可以改变函数内的this 指向
// call 的主要作用可以实现继承
function Father(uname, age, sex) {
this.uname = uname;
this.age = age;
this.sex = sex;
}
function Son(uname, age, sex) {
Father.call(this, uname, age, sex);
}
var son = new Son('张三', 18, '男');
console.log(son);
2. apply方法
//可以立即调用函数,可以改变函数内部的this指向
//第二个参数必须是数组
//可以利用apply借助数学内置对象求最大值
var arr = [1,2,3,4,5,6]
var max = Math.max.apply(Math,arr)
3.bind方法
//不会立即调用函数,可以改变this指向
//返回值:原函数的拷贝
var o {
name = 'daiv'
}
function fun(){
console.log(this)
}
//不会调用 返回新方法
var f = fun.bind(o)
f()
bind 使用
如果有的函数不需要去立即掉调用 又需要改变函数this指向
var btns = document.querySelectorAll('button'); for (var i = 0; i < btns.length; i++) { btns[i].onclick = function() { this.disabled = true; setTimeout(function() { this.disabled = false; }.bind(this), 2000); } }
总结
call --> 可以立即调用函数 参数任意
apply --> 可以立即调用函数 参数为数组
bind --> 不可以立即调用函数 参数任意 改变this但是不立即调用
ps:如有不足还请大佬指正,如有帮助,点个赞再走吧~