封装call,apply,bind

<script>
    let obj={
        name:'qwe',
        fn(){
            console.log(this.name)
            console.log(...arguments)
        }
    }
    let obj2={
        name:'zxc'
    }
    //封装call
    Function.prototype.myCall=function(that,...argu){
            that=that||window
        var fnName=Symbol(this.name)

        that[fnName]=this;

        let res=that[fnName](...argu);
        delete that[fnName]
    }
    // obj.fn.myCall(obj2,1,2,3)
    //apply
    Function.prototype.myApply=function(that,argu){
        that=that||window
        fnName=Symbol(this.name)
        that[fnName]=this
        that[fnName](...argu)
        delete that[fnName]
    }
    // obj.fn.myApply(obj2,[1,2,3])
  //bind
    Function.prototype.myBind=function(that,...argu){
        that=that||window
        let _self=this
        return function(){
            _self.myApply(that,argu.concat(...arguments))
        }
    }
    let fn2=obj.fn.myBind(obj2,1,4,5)
    fn2()
    </script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容