call apply bind 的区别

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

 1 var xw={
 2     name: "小王",
 3     gender: "男",
 4     age: 24,
 5     say: function(school,grade){
 6         alert(this.name+" , "+this.gender+" ,今年"+this.age+" ,在"+school+"上"+grade);
 7     }
 8 }
 9 var xh={
10     name: "小红",
11     gender: "女",
12     age: 18
13 }

我们通过call/apply的参数进行传参。对于call来说是这样的

 

xw.say.call(xh,"实验小学","六年级");

而对于apply来说是这样的

xw.say.apply(xh,["实验小学","六年级"]);

call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。那么bind怎么传参呢

xw.say.bind(xh,"实验小学","六年级")();

但是由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参。

xw.say.bind(xh)("实验小学","六年级");

在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向。

如果我们有一个对象banana= {color : “yellow”} ,我们不想对它重新定义 say 方法,那么我们可以通过 call 或 apply 

posted @ 2017-09-15 10:53  开始战斗  阅读(250)  评论(0编辑  收藏  举报