You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导出对象通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:39:00