bind()、apply()与call()都是用第一个参数改变调用函数的执行上下文,也就是this,apply()与call()的主要区别是两个函数都可以传多个参数,但是call()是一个一个的传进去,apply()把第二个参数之后的参数放进一个数组进行传值,两者与bind()的区别是,bind()返回的是一个函数,需要自己去调用,而call与apply就会直接调用。
var xw = {
name : "张三",
gender : "男",
age : 12,
say : function(school,grade) {
console.log(this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade);
}
}
var xh = {
name : "李四",
gender : "男",
age : 13
}
xw.say.call(xh,"实验小学","六年级");
xw.say.apply(xh,["实验小学","六年级"]);
xw.say.bind(xh,"实验小学","六年级")();
模拟bind()
if (!function() {}.bind) {
Function.prototype.bind = function(context) {
var self = this, args = Array.prototype.slice.call(arguments);
return function() {
return self.apply(context, args.slice(1));
}
};
}