以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!
BFE.devAI解答 - JavaScript 代码题
61. 实现`Function.prototype.call`
实现myCall
函数可以考虑使用函数的arguments
对象,为thisArg
赋值,然后调用函数即可。具体的实现如下:
Function.prototype.myCall = function (thisArg, ...args) { // 判断是否传递了thisArg,如果没有则默认为全局对象 thisArg = thisArg || window // 将当前函数作为thisArg的方法调用 thisArg.fn = this // 调用函数并传递参数 const result = thisArg.fn(...args) // 删除该方法,避免污染thisArg delete thisArg.fn // 返回结果 return result}
在myCall
函数中,首先判断是否传递了thisArg
,如果没有则默认为全局对象window
。然后将当前函数作为thisArg
的方法调用,并将参数传递给该方法。接着调用该方法并将结果存储在result
变量中,并删除该方法,避免污染thisArg
。最后返回结果即可。