我有字符串logo.cr.Button
和函数
logo.cr.Button = function(){
//something
}
var strg = 'logo.cr.Button';
strg();
现在不知怎的,我必须使该字符串成为函数调用
与strg();
类似,但它正在说
strg不是构造函数
这里
答案 0 :(得分:1)
这不起作用,因为JavaScript认为您使用点表示法。当您编写logo.cr.Button()
时,JavaScript正在对象Button()
中的对象cr
中查找函数logo
。
我建议将名称更改为logoCrButton = function()...
答案 1 :(得分:1)
您可以使用eval,但不建议这样做。 Secury问题只是一个原因,因为用户可能利用eval来执行不应该执行的不同代码。在this个问题中,我们会对其进行全面解释。
var logo={cr:{}};
logo.cr.Button = function(){
console.log("something");
}
var string = "logo.cr.Button()";
eval(string);

如果可以避免 eval ,则使用普通函数调用,对象或数组。相反,与动态评估某些参数相比,迭代数组会更好,更稳定,如您所见[{3}}。
第二个示例不使用 eval ,但是您可以使用字符串调用某个函数:
var obj={logo:{cr:{Button:function(){console.log("something");}}}};
var string = "logo.cr.Button";
function callFunctionByString(string,obj){
var parts = string.split('.');
parts.forEach(function(part){
obj = obj[part];
});
obj();
}
callFunctionByString(string,obj);

希望这有帮助。
答案 2 :(得分:1)
使用eval(“logo.cr.Button”)();
这将执行该功能,当然如果你有一个像这样的对象:
var logo = {
cr: {
}
};
答案 3 :(得分:1)
通常,当我们编写JavaScript函数时,生成的函数声明如下所示:
function demo() {
// function stuff here
}
你可能不仅仅意识到“在JavaScript函数中是一流的对象”。这是一个随处可见的短语,并且有充分的理由。这是一个非常强大的想法,它将JavaScript提升到了原来的位置。我们不会在这里讨论一流物体的细节。我们所关心的是,在JavaScript中,函数是对象。 这意味着也可以通过调用其构造函数声明上述函数:
var demo = new Function();
现在假设我们有一个带参数和指令的函数:
function demo(name, age) {
console.log('my name is ' + name);
console.log('my age is ' + age);
}
现在将其转换为Constructor语法:
var demo = new Function(
"name,age",
"console.log('my name is ' + name);" +
"console.log('my age is ' + age);"
);
这使得很容易看出这两个函数是相同的,它们只是以不同的方式声明。重要的区别在于,人们可以轻松访问我们应该能够操作的字符串。
这以非常类似的方式适用于您的功能。
var strfunc = new Function ("", "logo.cr.Button()");
我似乎无法格式化,因为我在移动设备上。但我会尽快。