【JavaScript】手写 bind

Function.prototype.myBind = function (thisArg, ...args) {
  return (...reArgs) => {
    return this.call(thisArg, ...args, ...reArgs)
  }
}
function func(numA, numB, numC) {
  console.log(this)
  console.log(numA, numB, numC)
  return numA + numB + numC
}
const person = {
  name: 'username'
}
/**
 * 1. 设置 this (目的:调用函数)
 * 2. 函数调用(传参+返回值)
 */
const fun1 = func.myBind(person, 1, 2, 3)  // this 为 {name: 'username'}
const result = fun1()
console.log('res: ', result)

总结:

手写bind方法

  1. function原型上添加myBind函数,参数1为绑定的this,参数2-参数2为绑定的参数
  2. 内部返回一个新箭头函数,目的是绑定作用域中的this
  3. 返回的函数内部,通过call进行this和参数绑定
  4. 通过call的参数2和参数3指定绑定的参数,和调用时传递的参数
Function.prototype.myBind = function (thisArg, ...args) {
  return (...args2) => {
   return this.call(thisArg, ...args, ...args2)
  }
}

你可能感兴趣的:(JavaScript,javascript,开发语言,ecmascript)