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);