手写apply
前言
又是一年的金三银四,疯狂的手写剧情再度上演,接下来就让我们一起来实现下JavaScript里的apply函数。
一、思路梳理
在实现手写apply之前让我们先来梳理下apply函数的使用场景。通常我们在使用apply的时候,需要两个对象(所有的一切都是对象🙈):
- 想要执行的function(我们假设叫foo)。
- 希望能够调用foo的对象(我们假设叫obj)。
那我们在实现apply函数的时候主要突破点就是能够获取到foo以及obj。那么接下来我们就带着这样的一个思路来实现apply方法吧。
二、apply方法的实现
function jApply(thisArg, argArray = []) {
// 传进来的是null和undefined时将this指向为window
thisArg = thisArg ?? window
// 确保传进来的是Object
thisArg = Object(thisArg)
// 生成一个唯一的key值,防止和传进来的对象的key重复
const key = Symbol()
thisArg[key] = this
// 获得函数的执行结果
const result = thisArg[key](...argArray)
// 删除手动添加的属性,使thisArg回到最初的样子
delete obj[key]
// 返回函数的执行结果
return result
}
Function