;(function(){ // 接管实参有三种计划 1、通过形参  2、...args 数组  3、arguments 伪数组,并且接管了所有的实参      // 因为call 接管不是数组 也不能安找形参来接管,所以抉择第三种 arguments 接管 function myCall(context, arguments){  context = context ? Object(context): window  //this 只有谁调用  this就是谁 这里示意 fn  // ================== 因为this指向了函数 所以能够试着 这样  //this() // 因为是独立函数调用 所以this 又指向了window 所以这样写不行  // ==================  // ================== 因为this指向了函数 也能够试着这样    let res = context.f(...args)  // ==================     let args = []  for(let i = 1; i<arguments.length; i++){   args.push(arguments[i])  }  let res = context.f(...args)  // 然而这样的就往源数据上增加了一个属性, 所以咱们须要删除 f属性  delete context.f    return res; }  // 挂载到Function 的原型对象上,就意味着所有的函数都能够调用myCall Function.prototype.myCall = myCall;})()function fn(num1, num2){ console.log(this) return num1 + num2}let obj = {name: 'wc'}let res = fn.myCall(obj ,1 ,2);