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

  • 相关阅读:
    Base64 编解码
    MFC:CTime类和CTimeSpan类
    VC对话框实现添加滚动条实现滚动效果
    组合框控件 -- CComboBox
    快速排序
    归并排序
    插入排序
    堆排序
    Mozilla新特性只支持https网站,再次推动SSL证书普及
    企业如何选择最佳的SSL
  • 原文地址:https://www.cnblogs.com/dropInInt/p/15219655.html
Copyright © 2011-2022 走看看