作用:改变函数运行时this的指向
bind和apply,call的区别
call和apply改变了函数的this上下文后便执行该函数,而bind则是返回改变了上下文后的一个函数,不会直接调用。
call、apply的区别
他们俩之间的差别在于参数的区别,call和aplly的第一个参数都是要改变上下文的对象,而call从第二个参数开始以参数列表的形式展现,apply则是把除了改变上下文对象的参数放在一个数组里面作为它的第二个参数
fn.call(obj, arg1, arg2, arg3...);
fn.apply(obj, [arg1, arg2, arg3...]);
应用
求数组中的最大和最小值
let arr = [34,5,3,6,54,6,-67,5,7,6,-8,687];
Math.max.call(Math, ...arr)
Math.max.apply(Math, arr)
let res = Math.max.bind(Math, ...arr)
res()
将伪数组转化为数组
var arrayLike = {
0: 'qianlong',
1: 'ziqi',
2: 'qianduan',
length: 3
}
let newarr = Array.prototype.slice.call(arrayLike);
利用call和apply做继承
var Person = function (name, age) {
this.name = name;
this.age = age;
};
var Girl = function (name) {
Person.call(this, name);
};
var Boy = function (name, age) {
Person.apply(this, arguments);
}
var g1 = new Girl ('qing');
var b1 = new Boy('qianlong', 100);```