/*
首先了解call()的作用
1.可以让代码立即执行
2.可以改变函数执行时内部的this指向
3.this指向了call的第一个实参,call后边的所有参数,都被作为了实参传给了前边的函数
提一下:Object.prototype.toString.call();//将obj的指向改成了你传的参数指向
*/
function fn(){
console.log(arguments);
console.log(this);
}
var obj ={
a:12,
b:13,
f:fn
}
Function.prototype.myCall = function myCall(context,...arg){//剩余运算符
//this 就是 fn
// 让fn(this).fn执行并且让函数中的this指向context
// context.qqq(): qqq执行时 里边的this指向就是context
context = context || window;//不传参数的时候默认就是window
let a = symbol();//symbol产生一个唯一不重复的值,防止命名冲突
context[a] = this;//context.qqq --->this
let res = context[a](...arg);//让 fn 执行并拿到传的参数
delete context[a];//删除增加了的qqq属性
return res;//返回获取的参数结果
}
fn.myCall(obj,6,6,6)