ChatGPT 可用网址,仅供交流学习使用,如对您有所帮助,请收藏并推荐给需要的朋友。
https://ckai.xyz
;(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);