javascript中bind,apply,call的相同和不同之处
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还有另外一种传参方式就是在后面的回调里面穿入参数

浙公网安备 33010602011771号