可以在严格模式下使用字符串值调用函数吗[重复]
Posted
技术标签:
【中文标题】可以在严格模式下使用字符串值调用函数吗[重复]【英文标题】:Can a function be called using string value in strict mode [duplicate] 【发布时间】:2015-03-15 11:13:38 【问题描述】:我想知道是否可以通过传递字符串名称来调用函数。以下是基本架构:
"use strict";
function foo()
var f = this;
f.fn = function(o)return fn(o)
function fn(o)
o.name();
function a()
alert('a');
function b()
alert('bb');
var f = new foo();
f.fn(name:'a');
f.fn(name:'b');
代码设置在http://jsfiddle.net/rexonms/9c7bnkc9/。
【问题讨论】:
【参考方案1】:您可以使用eval
:
function foo()
var f = this;
f.fn = function(o)return fn(o)
function fn(o)
eval(o.name + '()');
function a()
alert('a');
function b()
alert('bb');
var f = new foo();
f.fn(name:'a');
f.fn(name:'b');
这里是 jsFiddle:http://jsfiddle.net/9c7bnkc9/2/
【讨论】:
你可以使用 eval 但你可能不应该。如果您唯一的解决方案是 eval,您可能应该考虑更改设计的其他部分以避免 eval。 @JamesMontagne 在 99.9% 的情况下,你不应该使用eval
,但你必须知道它是如何工作的,以及你可以用它做什么。在我的职业生涯中有几个需要使用 eval 的案例。顺便说一句,这是一个问题 - 这是完全正确的答案。 (eval
***.com/questions/9464921/… 没有答案)。
@JamesMontagne 答案标记为已接受:“您无法通过字符串获取对局部变量的引用。您必须将本地对象添加到命名空间:”- FACEPALM(来自此处***.com/questions/9464921/…)
我没有否决您的答案,因为它是正确的,因为 eval 是在问题中列出的约束条件下的唯一解决方案。但是,除了该答案中的开场白之外,我同意答案其余部分中提出的解决方案。我将问题标记为重复,因为我确实认为这些问题是重复的。但是,对于该重复问题,目前没有eval
答案。您可以随意添加对该问题的答案,因为该问题现已关闭。我建议至少对 eval 是危险的事实做一点说明,尽管这完全取决于您。
另外,如果你觉得我的关闭作为重复是不合理的,你可以投票重新打开(不确定代表阈值是多少)。您也可以对该答案投反对票,并对开场陈述是错误的事实发表评论。以上是关于可以在严格模式下使用字符串值调用函数吗[重复]的主要内容,如果未能解决你的问题,请参考以下文章