首页 > 移动平台 > 详细

原生JS模拟实现call、apply、bind

时间:2019-02-27 00:53:00      阅读:330      评论:0      收藏:0      [点我收藏+]
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模拟实现call、apply、bind

原文:https://www.cnblogs.com/xcxjy/p/10441142.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!