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

JavaScript中apply函数调用返回undefined的问题求助

为什么apply调用结果是undefined?

嘿,这问题我之前刚踩过坑!咱们来一步步拆解:

你的问题核心在于**setName函数没有返回值**——它只是修改了this.fullName这个属性,但没有用return语句返回任何内容,JS里这种没有显式返回的函数,默认会返回undefined。

而callBack.apply(createdObj, [firstName, lastName])的返回值,就是callBack(也就是setName)执行后的返回值。所以你把这个结果赋值给变量,自然得到的是undefined啦。

两种解决办法

办法1:让setName返回修改后的结果

给setName加上return语句,这样apply调用后就能拿到你想要的结果:

var thisObj = { 
  fullName: 'test', 
  setName: function(firstName, lastName) { 
    this.fullName = firstName + " " + lastName;
    return this.fullName; // 新增返回语句
  } 
} 
function getInput(firstName, lastName, callBack, createdObj) { 
  return callBack.apply(createdObj, [firstName, lastName]); 
}

// 调用测试
var result = getInput("John", "Doe", thisObj.setName, thisObj);
console.log(result); // 会输出 "John Doe"

办法2:直接访问修改后的对象属性

如果不想改setName,也可以在apply调用后,直接去访问createdObj的fullName属性:

var thisObj = { 
  fullName: 'test', 
  setName: function(firstName, lastName) { 
    this.fullName = firstName + " " + lastName;
  } 
} 
function getInput(firstName, lastName, callBack, createdObj) { 
  callBack.apply(createdObj, [firstName, lastName]);
  return createdObj.fullName; // 返回对象的属性值
}

// 调用测试
var result = getInput("John", "Doe", thisObj.setName, thisObj);
console.log(result); // 同样输出 "John Doe"

简单总结:apply只是帮你改变函数的this指向并执行它,它的返回值完全取决于你调用的那个函数有没有返回内容~

内容的提问来源于stack exchange,提问作者user1871869

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:14:01