JS-call, apply, bind 区别

261 阅读1分钟

区别

call()、bind()、apply()都是用来重新定义this对象的指向的。作用都是相同的,只是传参的方式不同。

第一个参数都是'.'前面的函数this的指向,第二个参数是给'.'前面的函数传的实参。call可以接受列表,apply只接受一个数组,bind和call一样,但bind不改变原函数,而是返回一个新函数,所以必须调用才能执行。call和apply是直接调用了原函数,但只改变当前调用下的this值,下一次调用this值还原。

语法

函数.call(this指向,'参数1','参数2','参数3')

函数.apply(this指向,['参数1','参数2','参数3'])

函数.bind(this指向,'参数1','参数2','参数3')()

bind(……,……,……)返回的是一个新函数,必须重新调用(加括号)才能执行

例子:

var name="小月",age=19;
var obj={
   name:'小王',
   objAge:this.age,
   myFun:function(fm,t){
      console.log(this.name+'年龄'+this.age,'来自'+fm+'去往'+t)
   }
}
var db={
    name:'小一',
    age:99
}
obj.myFun.call(db,'成都','上海');     // 德玛 年龄 99  来自 成都去往上海 
obj.myFun.apply(db,['成都','上海']);      // 德玛 年龄 99  来自 成都去往上海   
obj.myFun.bind(db,'成都','上海')();       // 德玛 年龄 99  来自 成都去往上海 
obj.myFun.bind(db,['成都','上海'])();   // 德玛 年龄 99  来自 成都, 上海去往 undefined