2019年8月21号,轻松掌握call和apply的实现!

161 阅读1分钟

apply的具体实现

Function.prototype.apply = function(context, arr) {
  var context = Object(context) || window
  context.fn = this
  var result
  if (!arr) {
    result = context.fn()
  } else {
    var args = [];
    for (var i = 0, len = arr.length; i < len; i++) {
        args.push('arr[' + i + ']');
    }
    result = eval('context.fn(' + args + ')')
  }
  delete context.fn
  return result
}

call的具体实现

Function.prototype.call = function(context) {
	var context = context || window
	context.fn = this
	var args = []
	for(var i = 1; len = arguments.length; i < len; i++) {
		args.push('arguments[' + i + ']')
	}
	var result = eval('context.fn(' + args +')')
	delete context.fn
	return result
}