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方法
function
原型上添加myBind
函数,参数1为绑定的this,参数2-参数2为绑定的参数- 内部返回一个新箭头函数,目的是绑定作用域中的this
- 返回的函数内部,通过
call
进行this和参数绑定 - 通过
call
的参数2和参数3指定绑定的参数,和调用时传递的参数
Function.prototype.myBind = function (thisArg, ...args) {
return (...args2) => {
return this.call(thisArg, ...args, ...args2)
}
}
问题一:返回值为什么是箭头函数而不是普通函数?
如果是箭头函数,那么this 指向为父类,如果是普通函数,this 指向为全局 window。