在JavaScript中使用call()或apply()返回值

在JavaScript中使用call()或apply()返回值,javascript,Javascript,从call()或apply()调用函数时,是否有方法获取函数的返回值 我的设想: 我有一个可以与apply()函数配合使用的函数。在对象构造函数上: var someObject = new SomeObject({NameFunction: "MakeNames"}); 在对象方法中的循环上: var name = ""; for (var i = 0; i < data.length; i++) { name = window[this.NameFunction].apply

从call()或apply()调用函数时,是否有方法获取函数的返回值

我的设想:

我有一个可以与
apply()
函数配合使用的函数。在对象构造函数上:

var someObject = new SomeObject({NameFunction: "MakeNames"});
在对象方法中的循环上:

var name = "";
for (var i = 0; i < data.length; i++) {
    name = window[this.NameFunction].apply(null, [data[i]]);
}
var
name
保持为空原因
apply
不会从函数返回任何值。请注意,我确信函数已被调用,参数已成功传递。请不要告诉我使用
name=MakeNames(数据[i])直接,因为很明显我不想要这个解决方案

无论是
apply
call
,还是任何JavaScript都可以实现这一点,如果可以的话


如何实现这一点?

我看不到在您的代码中设置了
数据
,或者
数据[I]
将是具有属性
FirstName
LastName
的对象。尝试故障转移:

function MakeNames(data) {
    return (data.hasOwnProperty('FirstName')) ? data.FirstName + " " + data.LastName : 'John Doe';
}
结果:

window[this.NameFunction.toString()].apply(null, [data[i]])
与以下内容完全相同:

MakeNames(data[i])
因为唯一的区别是MakeNames函数中的这个值,而且因为没有使用它,所以它不会有任何区别。apply的使用不会改变函数是否返回值,或者值是什么


无论您有什么问题,它都不在(位)发布的代码中。

返回值对我来说可以。在浏览器控制台
var x=“huh”.toString.apply(“测试”)中运行此命令为我将x设置为“测试”。应用和调用将返回值。一定是出了什么事。你能提供更多的代码来公开你试图调用的函数吗?还有toString在做什么?在您的示例中,您的函数名已经是一个字符串。@ben336对不起,伙计,我不明白您的意思。你能给出一个更准确的答案吗?@Tim discsider that toString()。我删除了它,结果保持不变。@DontVoteMeDown我的回答非常准确:)其他评论和RobG的回答也是如此。关键是调用和应用不会阻止您返回值。你的问题在别处。该死的,你是对的。此代码正常,问题不在其范围内。我真丢脸。谢谢你,伙计。
MakeNames(data[i])