// 手动实现call函数
Function.prototype.call2 = function (obj) {
// 传null的话,this就指向window
var obj = obj || window
var args = []
for(var i = 1, len = arguments.length; i < len; i++) {
args.push(`arguments[${i}]`)
}
// 拿到调用call2的函数,作为obj的方法
obj.fn = this
// 加上入参,并执行函数
var res = eval(`obj.fn(${args})`)
// 删除之前的方法
delete obj.fn
// 函数返回值
return res
}
// 测试一下
var value = 2;
var obj = {
value: 1
}
function bar(name, age) {
console.log(this.value);
return {
value: this.value,
name: name,
age: age
}
}
bar.call2(null); // 2
var res = bar.call2(obj, 'kevin', 18)
console.log(res);
console