javascript 中apply、call、bind的区别

引用:
        b、
1、apply、call
      apply和call都是为了改变摸个函数的上下文,即改变函数内部的this的指向
   function fruits(){};
   fruits.prototype = {
         color:'red',
         say:function(){
         console.log('My color is '+this.color);
    }
   };
   apple = new fruits();
   apple.say(); //My color is red
当我们有一个对象 banana = {color:"yellow"},我们不想重新定义say方法,那么我们可以通过call或者apply用apply的say方法
  banana = {color:"yellow"};
  apple.say.call(banana);//My color is yellow
  apple.say.apply(banana);//My color is yellow
从上我们可以看出:call和apply都可以好变this,当一个Object没有某个方法的时候(banana没有say方法),但是其他对象有(apple有say方法),我们可以借助call或者apply用其他对象的方法来操作
2、apply和call的区别
      apply和call的作用是完全一样的,值是接受的参数不一样
    var func = function(arg1, arg2) {    };
    func.call(this, arg1, arg2);
    func.apply(this, [arg1, arg2])
    当某个函数的参数的个数是明确的可以用call方法传入多个参数
    当某个函数的参数的个数是不确定的可以用apply方法一个数组
3、apply和call的常用用法
      var array1 = [12,"foo",{name:"Joe"},-2458];
      var array2 = ["Doe" , 555 , 100];
      //Array.prototype.push.apply(array1,array2);
      //array1 => [12, "foo", Object, -2458, "Doe", 555, 100]
      //array1.push(array2,'a');
      //array1 => [12, "foo", Object, -2458, Array[3],'a']
    注:push方法将新元素出现的顺序把元素插入到数组中去,如果新元素中存在数组,则把其当做单个元素添加进去

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注