Cosen95/fe_interview

手写call()

Opened this issue · 1 comments

手写call()
Function.prototype.call2 = 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;
};

var value = 2;

var obj = {
  value: 1,
};

function bar(name, age) {
  console.log(this.value, window);
  return {
    value: this.value,
    name: name,
    age: age,
  };
}

bar.call(null); // 2

console.log(bar.call2(obj, "kevin", 18));