替换this的调用方式

Posted the-last

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了替换this的调用方式相关的知识,希望对你有一定的参考价值。

原生实现 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的调用方式的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中this指向问题(函数的调用方式)

函数调用的不同方式,以及this的指向

调用DownloadData方法必须替换成调用异步版

JavaScript 语言中的 this

js函数的四种调用方式以及对应的this指向

构造函数方式调用