原生JS模拟实现callapplybind

Posted xcxjy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生JS模拟实现callapplybind相关的知识,希望对你有一定的参考价值。

function call_mock (obj) {
    var aim_fun = this;
    var argument = [];
    for (var i = 1; i < arguments.length; i++) {
        argument.push(arguments[i]);
    }
    obj.aim_fun = aim_fun;
    var result = eval(‘obj.aim_fun(‘+ argument.join() + ‘)‘);
    delete obj.aim_fun;
    return result;
}

Function.prototype.call_mock = call_mock;

function apply_mock (obj, args) {
    var aim_fun = this;
    obj.aim_fun = aim_fun;
    var result = eval(‘obj.aim_fun(‘+ args.join() + ‘)‘);
    delete obj.aim_fun;
    return result;
}

Function.prototype.apply_mock = apply_mock;

function bind_mock (obj) {
    var aim_fun = this;
    var argument = [];
    for (var i = 1; i < arguments.length; i++) {
        argument.push(arguments[i]);
    }
    var fNOP = function () {};
    var fBound = function () {
        return aim_fun.apply_mock(obj, argument)
    }
    fNOP.prototype = this.prototype;
    fBound.prototype = new fNOP();
    return fBound;
}

Function.prototype.bind_mock = bind_mock;

var a = {
    c:1,
    see(a, b) {
        console.log(`${this.c}${a}${b}`);
    }
}

c = 0;

a.see.bind_mock(global, 1, 2);

 

以上是关于原生JS模拟实现callapplybind的主要内容,如果未能解决你的问题,请参考以下文章

原生js+css实现重力模拟弹跳系统的登录页面

原生JS模拟Promise实现详解

JS中的callapplybind方法详解

手写JS面试题 --- call apply bind 实现

静态页面:原生JS模拟京东秒杀专场倒计时

原生JS实现队结构及利用队列模拟‘击鼓传花’游戏