手写apply()

Posted jser_dimple

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手写apply()相关的知识,希望对你有一定的参考价值。

apply() 方法调用一个具有给定this值的函数,以及作为一个数组(或类似数组对象)提供的参数。
语法:func.apply(thisArg, [argsArray])
apply()和call()类似,区别在于call()接收参数列表,而apply()接收一个参数数组,所以我们在call()的实现上简单改一下入参形式即可

Function.prototype.myApply = function(thisArg, args) {
    if(typeof this !== ‘function‘) {
        throw new TypeError(‘error‘)
    }
    const fn = Symbol(‘fn‘)        // 声明一个独有的Symbol属性, 防止fn覆盖已有属性
    thisArg = thisArg || window    // 若没有传入this, 默认绑定window对象
    thisArg[fn] = this              // this指向调用call的对象,即我们要改变this指向的函数
    const result = thisArg[fn](...args)  // 执行当前函数
    delete thisArg[fn]              // 删除我们声明的fn属性
    return result                  // 返回函数执行结果
}

//测试
foo.myApply(obj, [])     // 输出‘写代码像蔡徐抻‘

本文转载自:https://juejin.im/post/5e8b261ae51d4546c0382ab4

以上是关于手写apply()的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript高级手写apply()call()bind()

JavaScript高级手写apply()call()bind()

JS 手写之 Function.prototype.apply

JavaScript基础之--- 手写 apply方法 的实现

手写系列 # 4:实现 apply 方法

手写callapplybind函数和arguments&数组函数slice的实现