第二十篇 如何实现一个 call 或apply 函数?
引自冴羽大佬的代码,可以说比较完整了。
Function.prototype.call = function (context) { let context = context || window; let fn = Symbol('fn'); context.fn = this; let args = []; for(let i = 1, len = arguments.length; i < len; i++) { args.push('arguments[' + i + ']'); } let result = eval('context.fn(' + args +')'); delete context.fn return result; }
不过我认为换成 ES6 的语法会更精炼一些:
Function.prototype.call = function (context, ...args) { let context = context || window; let fn = new Symbol('fn'); context.fn = this; let result = eval('context.fn(...args)'); delete context.fn return result; }
类似的,有 apply 的对应实现:
Function.prototype.apply = function (context, args) { let context = context || window; context.fn = this; let result = eval('context.fn(...args)'); delete context.fn return result; }
更多相关文章推荐:
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 第二十篇 如何实现一个 call 或apply 函数?
码云笔记 » 第二十篇 如何实现一个 call 或apply 函数?