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

  • 相关阅读:
    MFC中注释含义
    数字时钟
    布线问题分支限界法
    精度计算大数阶乘ACM常用算法
    C++库大全
    简单文本编辑器制作windows程序设计雏形
    使用计时器方法2
    MFC常用基本数据类型
    Xcode 代码格式化/自动排版
    android的color值
  • 原文地址:https://www.cnblogs.com/dropInInt/p/15219655.html
Copyright © 2011-2022 走看看