摘录于JavaScript权威指南
apply实现
Function.prototype.apply = function (object, parameters) {
var me = this;
var o = object || window;
var args = parameters || [];
o._apply_ = me;
var stringArgs = [];
for (var i = 0, iLen = args.length; i < iLen; i++) {
stringArgs[i] = "args[" + i + "]";
}
var arglist =stringArgs.join(",");
var methodcall = "o._apply_(" + arglist + ")";
var result = eval(methodcall);
delete o._apply_;
return result;
};
call实现
Function.prototype.call = function (object) {
if (!object) {
return;
}
var me = this;
var o = object || window;
var args = arguments;
o._call_ = me;
var stringArgs = [];
for (var i = 1, iLen = args.length; i < iLen; i++) {
stringArgs[i-1] = "args[" + i + "]";
}
var arglist =stringArgs.join(",");
var methodcall = "o._call_(" + arglist + ")";
var result = eval(methodcall);
delete o._apply_;
return result;
};