都是用来指定 this 的环境
相同点:call apply bind 改变 this 指向,第一个参数是需要更改的this
不同点:bind 方法返回的是一个修改过后的的函数需要在调用,apply 第二个参数是 数组,call ,bind 正常字符串可以是多个字符串
1、call,apply 调用一个对象的的一个方法,用另一个对象替换当前对象,eg: B.call(A,args1,args2....)   eg:B.apply(A,[a,b,...]) 
  var name = '小仙女' , age = 18
  var a = {
    name:'孟浩然',
    objage:this.age,
   fn:function() {
     console.log(this)
     console.log(this.name + this.age)
   }
 }
   var fw = {
    name:'小帅哥',
     age:18
   }
    a.fn.call() // 小仙女 19 此时的 this 指向 window
    a.fn.call(fw) // 小帅哥18 此时this 指向 {name:'小帅哥',age:18}
    a.fn.apply(fw) // 小帅哥18 此时this 指向 {name:'小帅哥',age:18}
    a.fn.bind(fw)() // 小帅哥18 此时this 指向 {name:'小帅哥',age:18}
  function getType(a){


2.call 的应用
2.1 利用 call 判断数据类型 可以利用 Object.prototype.toString.call()
   console.log(Object.prototype.toString.call("qq"))            // [Object String] 返回值都是字符串类型
  console.log(Object.prototype.toString.call(12))              // [object Number]
  console.log(Object.prototype.toString.call(false))           // [object Boolean]
  console.log(Object.prototype.toString.call(undefined))       // [object Undefined]
  console.log(Object.prototype.toString.call(null))            // [object Null]
  console.log(Object.prototype.toString.call(function(){}))    // [object Function]
  console.log(Object.prototype.toString.call([]))              // [object Array]
  console.log(Object.prototype.toString.call({}))              // [object Object]