您的位置:首页 > 移动开发

javascript中apply、call和bind的区别

2016-11-26 19:27 405 查看

相同点

都是改变函数this对象的指向的.

第一个参数都是this要指向的对象.

都可以利用后续参数传参.

区别

案例一:

(区分call\apply与bind的区别)

var ww = {
name:"旺旺",
gender:"男",
age:24,
say:function(){
alert(this.name+","+this.gender+",今年"+this.age);
}
}
var yy = {
name:"鱼鱼",
gnder:"女",
age:18
}
ww.say();


结果显示为:旺旺,男,今年24

?如何让ww的say方法显示yy的数据,如下:

call方法
ww.say.call(yy);


apply方法
ww.say.apply(yy);


bind方法
ww.say.apply(yy)();


所以call和apply都是对函数直接调用,而bind方法返回的仍然是一个函数,所以还要用()来进行调用才可以.

案例二:

(区分call与apply的区别)

var ww = {
name:"旺旺",
gender:"男",
age:24,
say:function(school,grade){
alert(this.name+","+this.gender+",今年"+this.age+",在"+school+"上"+grade);
}
}
var yy = {
name:"鱼鱼",
gnder:"女",
age:18
}
ww.say();


call
ww.say.call(yy,"实验中学","六年级");


apply
ww.say.call(yy,["实验中学","六年级"]);


bind
ww.say.call(yy,"实验中学","六年级")();


区别在于call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素与say方法中一一对应的,这就是两者最大区别.

原文讲解点这里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: