function fun(a,b){
        console.log("a = "+ a);
        console.log("b = "+ b);
        alert(this);
      }

      var obj= {
        name:"obj",
        sayName:function(){
          alert(this.name);
        }
      };
 
      /**
       *  call() 和 apply()
       *  -这两个方法都是函数对象的方法 需要通过函数对象来调用
       *  -当对函数调用call() 和 apply() 都会调用函数执行
       *  在调用call() 和 apply() 可以将 一个对象指定为第一个参数 
       *    此时 这个函数将会成为函数执行时的this
       * 
       *  call() 方法可以将实参在对象之后依次传递
       *  apply() 方法需要将实参封装到一个数组中统一传递
       * 
       *  -this的情况
       *    1 以函数形式调用时, this 永远都是window
       *    2 以方法的形式调用时, this 是调用方法的对象
       *    3 以构造函数的方法调用时,this 是新创建的那个对象
       *    4 使用 call 和 apply 调用时,this 是 指定的那个对象
      */

      // fun.call(obj,2,3)
      fun.apply(obj,[2,3])
    
      var obj2= {name:"obj2"}; 

      //fun()  // [object Window]
      //  fun.call(); // [object Object]
      //  fun.apply(); //[object Window]

      //fun.call(obj); //[object Object]
      //fun.apply(obj2);  //[object Object]

      // obj.sayName.apply(obj2);