zoukankan      html  css  js  c++  java
  • call,apply,bind实现

    自定义call方法

    Function.prototype.myCall = function (context) {
        if (typeof this !== 'function'){
            throw new TypeError(`${context} is not a function`)
        }
        context = context || window
        context.fn = this
        let args = [...arguments].slice(1)
        let myfn = context.fn(args)
        delete context.fn
        return myfn
    }

    自定义apply方法

    Function.prototype.myApply = function (context) {
        if (typeof this !== 'function'){
            throw new TypeError(`${context} is not a function`)
        }
        context = context || window
        context.fn = this
        let myfn
        if (arguments[1]) {
            myfn = context.fn(...arguments[1])
        } else {
            myfn = context.fn()
        }
        delete context.fn
        return myfn
    }

    自定义bind方法

    Function.prototype.myBind = function (context) {
        if (typeof this !== 'function'){
            throw new TypeError(`${context} is not a function`)
        }
        const _this = this
        const args = [...arguments].slice(1)
        return function myFn () {
            if (this instanceof myFn) {
                return new _this(...args, ...arguments)
            }
            return _this.apply(context, args.concat(...arguments))
        }
    }

    参考:

    https://juejin.cn/post/6844903764999012366#heading-2

  • 相关阅读:
    jdk1.8新特性
    jdk1.7新特性
    jdk1.6新特性
    第十九课 pluginlib&Nodelet
    第十八课 Gazebo仿真器
    第十七课 导航实践(2)
    第十六课 导航实践(1)
    第十五课 导航基础
    十四课 slam&gmapping
    第十三课 Actionlib(2)
  • 原文地址:https://www.cnblogs.com/dropInInt/p/15219655.html
Copyright © 2011-2022 走看看