导出对象通过call()传给另一导出函数时返回undefined,是什么原因?
问题成因
这个问题是箭头函数的this绑定特性导致的:
- 箭头函数没有自身的this绑定,它的this完全继承自定义时所在的外层词法作用域的this,且这个指向一旦固定就无法被修改,
call/apply/bind方法传入的this参数会被箭头函数直接忽略。 - 你的
showMe箭头函数定义在ES模块的顶层作用域,ES模块默认启用严格模式,顶层作用域的this值为undefined,因此showMe内部的this固定为undefined,即便调用showMe.call(eng)也无法修改this指向。
解决方案
下面两种方案都可以解决该问题:
- 方案一:将
showMe改为普通函数,普通函数支持通过call/apply动态修改this指向
修改后的utils.js对应代码:
// utils.js 其他代码不变 export function showMe() { console.log(this.val); }
原有调用逻辑不需要修改,showMe.call(eng)执行时内部this就会指向eng对象,正确输出Love。
- 方案二:保留箭头函数,调整为传参方式获取目标对象,不需要依赖this绑定
修改后的utils.js对应代码:
// utils.js 其他代码不变 export const showMe = (lang) => { console.log(lang.val); }
调用时直接传入目标对象即可,不需要使用call方法:
// main.js 中fn函数修改为 const fn = () => { showMe(eng); }
内容的提问来源于stack exchange,提问作者Feather Ridgemont
相关产品推荐
相关产品推荐

