call、apply、bind的区别

74 阅读1分钟

call、apply、bind之间相同与不同之处

1、call和apply传参方式不同,call是传离散数据,apply传输数组

2、bind返回值是函数

3、bind和call的传参是一样的

4、相同之处都是可以改变this指向

const Tx={
  name:'freemen',
  company:'Tencent',
  time:'2001-1-1',
  say(company){
    console.log(`my name is `,this.name)
    console.log(`my company is`,this.company);
  }
}

const Al={
  name:'vinko',
  company:'Alibaba',
  time:'2001-1-1',
  say(company){
    console.log(`my name is `,this.name)
    console.log(`my company is`,this.company);
  }
}

Tx.say(Tx)
//my name is  freemen
//my company is Tencent

Tx.say.call(Al,'Alibaba')
//my name is  vinko
//my company is Alibaba

Tx.say.apply(Al,['Alibaba'])
//my name is  vinko
//my company is Alibaba

const say = Tx.say.bind(Al,'Alibaba')
say()
//my name is  vinko
//my company is Alibaba

call的使用场景

1、判断数据类型

const arr = [1,3,5,6,7]
const type = Object.prototype.toString.call(arr);
console.log(type);//[object Array]

2、伪数组转数组

const arrLike = {
  0:'name',
  1:'age',
  2:'gender',
  length:3
}
const array = Array.prototype.slice.call(arrLike);
console.log(array);//[ 'name', 'age', 'gender' ]

apply使用场景

1、给数组求最大值、最小值

const arr = [1,3,5,6,7]
const max = Math.max.apply(null,arr)
console.log(max);//7
const min = Math.min.apply(null,arr)
console.log(min);//1