美文网首页
apply、call和bind对比

apply、call和bind对比

作者: 尤蛊 | 来源:发表于2020-04-23 14:27 被阅读0次

apply、call和bind对比

三者异同

  1. 三者都是用来改变函数执行时的上下文,也就是改变this的指向。
  2. call方法传递给调用函数的参数是逐个列出来的,而apply第二个以上的参数则要写在数组/类数组中,bind支持以上两种写法
  3. call和apply直接执行了函数,而bind返回的是一个绑定上下文的函数,需要调用才会执行

三者用法

  • apply的用法

    Function.apply(obj, [arg1, arg2....])
    

    立即执行

  • call的用法

    Function.call(obj, arg1, arg2....)
    

    立即执行

  • bind的用法

    // 支持以上两种写法
    Function.bind(obj, [arg1, arg2....])
    Function.bind(obj, arg1, arg2....)
    

    返回一个绑定上下文的函数,并且需要调用,才会执行

三种用法第一个参数都是是一个对象, 是Function 的调用者,将会指向这个对象。如果不传,则默认为全局对象 window

举个栗子

// call
const obj = {
  name: 'danae'
}
function sayHello(args) {
  console.log(this.name, args);
}
sayHello.call(obj, 'nice to meet you!')

// 输出: danae nice to meet you


// apply
const obj = {
  name: 'danae'
}
function sayHello(args) {
  console.log(this.name, args);
}
sayHello.apply(obj, ['nice to meet you!'])

//输出: danae nice to meet you!


// bind
const obj = {
  name: 'danae'
}
function sayHello(args) {
  console.log(this.name, args);
}
sayHello.bind(obj, 'nice to meet you!')()
// 或者
const sayHelloFunc = sayHello.bind(obj, 'nice to meet you!')
sayHelloFunc()
// 输出: danae nice to meet you!

相关文章

网友评论

      本文标题:apply、call和bind对比

      本文链接:https://www.haomeiwen.com/subject/mhcaihtx.html