1、bind、apply、call的区别
共同点:都允许为不同的对象分配和调用属于一个对象的函数/方法,改变函数内 this 的指向。
- 都是用来改变函数的this对象的指向的。
- 第一个参数都是this要指向的对象。
- 都可以利用后续参数传参。 不同点:
- apply
第二个参数为数组和 call 接收的参数形式不同 - apply 和 call 都是直接调用函数并得到函数执行结果,而
bind 会返回待执行函数,需要再次调用
var xw = {
name : "小王",
gender : "男",
age : 24,
say : function(school,grade) {
alert(this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade);
}
}
var xh = {
name : "小红",
gender : "女",
age : 18
}
调用:xw.say.call(xh,"实验小学","六年级");
xw.say.apply(xh,["实验小学","六年级郑州牛皮癣医院"]);
xw.say.bind(xh,"实验小学","六年级")(); 或者 xw.say.bind(xh)("实验小学","六年级");