// 实现call函数步骤
// 1.判断调用对象是否为函数
// 2.判断上下文对象是否存在,不存在使用window
// 3.处理传入参数,截取第一个参数后的所有参数
// 4.将函数作为上下文的一个属性
// 5. 使用上下文调用这个方法,并保存返回结果
// 6.删除刚才新增的属性
// 7.返回结果
Function.prototype.myCall=function(context){
// 判断调用对象是否为函数
if(typeof this !=="function"){
console.error("type err")
};
// 判断上下文是否存在,不存在使用window
context = context || window;
// 处理传入参数,截取第一个参数后的所有参数
let args = [...arguments].slice(1);
let result = null;
// 将函数设置为上下文属性
context.fn=this;
// 调用函数并保存返回结果
result=context.fn(...args);
// 将刚才新增属性删除
delete context.fn;
// 返回结果
return result;
}
// 测试是否myCall
var name="爸爸";
var age=45;
const obj={
name:"大哥",
age:18,
say:function(){
console.log(`我是${this.name}今年${this.age}`);
}
}
const obj2={
name:"弟弟",
age:12
}
obj.say();
obj.say.myCall();
obj.say.myCall(obj2);
console