call
Function.prototype.myCall = function () {
var ctx = arguments[0] || window;
ctx.fn = this;
var args = [];
for (var i = 1; i < arguments.length; i++) {
args.push('arguments[' + i + ']');
}
var result = eval('ctx.fn(' + args.join(',') + ')');
delete ctx.fn;
return result;
}
apply
Function.prototype.myApply = function(ctx, arr) {
var ctx = ctx || window;
ctx.fn = this;
var result;
if (!arr) {
result = ctx.fn();
delete ctx.fn;
return result;
} else {
var args = [];
for (var i = 0; i < arr.length; i++) {
args.push('arr[' + i + ']');
}
result = eval('ctx.fn(' + args.join(',') + ')');
delete ctx.fn;
return result;
}
}