摘录于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;

};