码迷,mamicode.com
首页 > 其他好文 > 详细

替换this的调用方式

时间:2019-08-18 19:23:03      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:callback   es6   数组   str   amp   delete   eva   object   efi   

原生实现 call 方法

Function.prototype.callback = function(firstarg, ...args) {
    
    if (!firstarg) {
        firstarg = typeof window === ‘undefined‘ ? ‘global‘ : ‘window‘;
    }
    firstarg.func = this;
    let res = null;

    if (args) {
        res = firstarg.func(args);
    } else {
        res = firstarg.func();
    }
    
    delete firstarg.func;
    return res;
}

原生实现 apply 方法

Function.prototype.apply = function(firstArg, arr) {
    if (arr && Object.prototype.toString.call(arr) !== ‘[object Array]‘) {
        throw new Error(‘第二个参数应为数组‘);
    }
    if (!firstarg) {
        firstarg = typeof window === ‘undefined‘ ? ‘global‘ : ‘window‘;
    }
    firstarg.func = this;
    let res = null;
    
    if (arr.length>0) {
        res = eval(‘firstarg.func(‘+arr.join(‘,‘)+‘)‘);
    } else {
        res = firstarg.func();
    }
    return res;
}

原生实现 bind 方法

Function.prototype.bind = function (ctx, ...formerArgs) {
    const _this = this;
    return (...laterArgs) => {
        return _this.apply(ctx, formerArgs.concat(laterArgs));
    }
}


**就是这么简单**

替换this的调用方式

标签:callback   es6   数组   str   amp   delete   eva   object   efi   

原文地址:https://www.cnblogs.com/the-last/p/11373273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!