call、apply和bind的学习

相似之处:
1、都是用来改变函数的this对象的指向的。
2、第一个参数都是this要指向的对象。
3、都可以利用后续参数传参。

  var xw = {  name : "小王",gender : "男" age : 24, say : function() {console.log(this.name + " , " + this.gender + " ,今年" + this.age); }         

  var xh = {  name : "小黄" ,gender : "女", age : 18 }               

调用xw.say(); //这个简单 打印出:小王,男,今年24

那么如何用xw的say方法来显示xh的数据呢。这时候就可以用到call、apply、bind

xw.say.call(xh);  //这时打印的就是:  小黄,女,今年18

xw.say.apply(xh);

xw.say.bind(xh)();

这三句返回一样;

call、apply和bind的学习

 

 

 bind比call和apply多了(),所以bind返回函数需要自己再执行调用一次,而bind和call都是对函数的直接调用;

接下来我们看一下call和apply的区别:

  var xw = {  name : "小王",gender : "男" age : 24, say : function(city,school) {console.log(this.name + " , " + this.gender + " ,今年" + this.age+‘,在‘+city+school); }         

  var xh = {  name : "小黄" ,gender : "女", age : 18 }      

方法里带多个参数,

xw.say.call(xh,‘厦门‘,‘双十中学‘);

xw.say.apply(xh,[‘厦门‘,‘双十中学‘]);

xw.say.bind(xh,‘厦门‘,‘双十中学‘)();  //小黄,女,今年18,在厦门双十中学

或者xw.say.bind(xh)(‘厦门‘,‘双十中学‘);

call、apply和bind的学习

 

 

 没带参数则是underfind;

这里call和apply的区别主要在于带参的形式,可以记住apply是以array数组形式都是,和call是...arg形式,bind和call一样;

 

call、apply和bind的学习

上一篇:通过重新上传修改后的docker镜像来在kubeapps上实现k8s上部署的nginx版本更新,回退等


下一篇:使用fidder对安卓模拟器进行抓包