在JavaScript中使用call()或apply()返回值
从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
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]]);
}
varname
保持为空原因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])