Skip to content

数组的函数式方法的第二个参数

数组数据机构中存在一些方法,它们以函数作为参数,像mapforEacheveryfindsomefilter等,它们可以传入第二个参数指定函数的执行环境。

作为参数传入的函数,如果不是箭头函数或绑定环境的情况下,其中this将指向全局变量(非严格环境)或undefined(严格环境),有时候我们希望它指向定义函数的环境,这时候就可以传入第二个参数。

一些情况下,比如将方法作为参数传入,方法中还需要访问this时特别好用:

js
class Orders {
  fetchOrders() {
    const data = [{ id: 0, status: 0 }]
    return data.map(this.formatOrder, this)

    // return data.map(this.formatOrder)
    // Uncaught TypeError: Cannot read properties of undefined (reading 'formatStatus')
  }
  
  formatOrder(item) {
    return {
      id: item.id,
      status: this.formatStatus(item.status)
    }
  }

  formatStatus(status) {
    return status === 0 ? 'pending' : 'done'
  }
}