1.相同点
(1)都可以用来改变函数的this的指向
(2)使用时第一个参数都是this所指向的对象,并且都可以后续参数传参
2.区别
(1)call跟apply只是参数传参的方式不一样,call以多个参数形式传入,而apply则以数组的形式传入
(2)bind传参的方式可以跟call一样,由于bind返回的是一个函数,因此我们也可以在调用的时候在进行传参
下面看两个例子:
var func1 = { name : "teal", gender : "男", age : 20, intro: function() { alert(this.name + " , " + this.gender + " ,今年" + this.age); } } var func2 = { name : "小红", gender : "女", age : 18 } //小红 , 女 ,今年18 //func1.intro.call(func2); //func1.intro.apply(func2); //func1.intro.bind(func2)(); var func1 = { name : "teal", gender : "男", age : 24, intro : function(province,city) { alert(this.name + " , " + this.gender + " ,今年" + this.age + " ,住在" + province + "省" + city + "市"); } } var func2 = { name : "小红", gender : "女", age : 18 } // 小红 , 女 ,今年18 ,住在广东省广州市 //func1.intro.call(func2,"广东","广州"); //func1.intro.apply(func2,["广东","广州"]); //func1.intro.bind(func2,"广东","广州")(); //func1.intro.bind(func2)("广东","广州");