javasctipt中bind,apply,call的相同点是:
1,都是用来改变this的指向;
2,都可以通过后续参数进行传参;
3,第一个参数都是指定this要指向的对象;
不同点:
1,调用方式不同,apply和call的调用方式一致,但是bind方式就不一样了;
var xz = { name:'小张', age:20, show: function () { console.log("name: %s; age: %d;",this.name,this.age); } }var xh = { name:'小红', age:22 }; xz.show(); xz.show.apply(xh); xz.show.call(xh); xz.show.bind(xh)(); //bind方法返回的任然是一个方法,所以还需要加()进行调用;
2,传参方式不同
var xz = { name:'小张', age:20, show: function (school,grade) { console.log("name: %s; age: %d; school:%s; grade:%s",this.name,this.age,school,grade); } }var xh = { name:'小红', age:22 }; xz.show('四川大学','12级4班'); xz.show.apply(xh,['电子科技大学','10级5班']); xz.show.call(xh,"电子科技大学成都学院",'12级4班'); xz.show.bind(xh,"电子科技大学成都学院",'12级4班')(); xz.show.bind(xh)("电子科技大学成都学院",'12级4班');
apply的传参方式是数组形式;call和bind的传参方式相同,使用一一对应的方式传入,而bind还有另外一种传参方式就是在后面的回调里面穿入参数