js中手写apply(不能使用ES6语法)和使用ES6语法对比

JavaScript 专栏收录该内容
53 篇文章 1 订阅

js手写apply(不能使用ES6语法)

参考前边手写call

// apply和call的区别就是传参方式不同,apply第二个参数传的是数组
        Function.prototype.myApply = function(context,args){
                if(context === null || context === undefined){
                    context = window
                }else{
                    context = Object(context)
                }
            function mySymbol(obj){
                let unique = Math.random() + new Date().getTime()
                if(obj.hasOwnProperty(unique)){
                    return mySymbol(obj)
                }else{
                    return unique
                }
            }
            let fnName = mySymbol(context)
            context[fnName] = this
            let arr = []
            if(args){
                for (let i = 0; i <args.length; i++) {
                    arr.push('args[' + i + ']')
                }
            }
            let result = eval('context[fnName]('+arr.join(',')+')')
            delete context[fnName]
            return result
        }

js手写apply(使用ES6语法)

		Function.prototype.myApply = function(context,args){
            if(context === null || context === undefined){
                context = window
            }else{
                context = Object(context)
            }
            let fnName = Symbol('唯一')
            context[fnName] = this
            let result = context[fnName](...args)
            delete context[fnName]
            return result
        }

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值