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