码迷,mamicode.com
首页 > 移动开发 > 详细

js call apply bind简单的理解

时间:2015-10-25 16:13:39      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:

相同点:JS中call与apply方法可以改变某个函数执行的上下文环境,也就是可以改变函数内this的指向。
区别:call与apply方法的参数中,第一个参数都是指定的上下文环境或者指定的对象,而call()方法传入的参数都是不定的,而apply()方法传入的参数都是放入数组中才能传入的。

bind()方法与call()和apply()方法很相似,都是可以改变函数内this的指向。

MDN的解释是:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入bind()方法的第一个参数作为this,传入bind()方法的第二个以及以后的参数加上绑定函数运行时本省的参数按照顺序作为原函数的参数来调用原函数。
如果只是想改变上下文环境,而非执行该函数,则使用bind()方法,call()或apply()方法会立即执行该函数。

Demo:

(function(){

  var obj = {
    id: 1,
    name: ‘Object‘,
    show: function(){
      console.log(‘编号为:%d,姓名为:%s‘, this.id, this.name);
    }
  };
  
  obj.show();//编号为:1,姓名为:Object
  
  var lili = {
    id: 2,
    name: ‘LiLi‘
  };
  obj.show.call(lili);//编号为:2,姓名为:LiLi
  obj.show.apply(lili);//编号为:2,姓名为:LiLi
  obj.show.bind(lili)();//编号为:2,姓名为:LiLi

})();

应用:

(function(){

  var arr1 = [1, 3, 5, 7, 9];
  //最大值:
  console.log(Math.max.apply(null, arr1));//9
  //最小值:
  console.log(Math.min.apply(null, arr1));//1
  var arr2 = [‘a‘, ‘b‘, ‘c‘, ‘d‘];
 
  
  //数组追加
  Array.prototype.push.apply(arr1, arr2);
  console.log(arr1);// [1, 3, 5, 7, 9, "a", "b", "c", "d"]

})();

 

js call apply bind简单的理解

标签:

原文地址:http://www.cnblogs.com/xiaoxian1369/p/4908858.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!