如何使javascript字符串成为函数调用
我有字符串如何使javascript字符串成为函数调用,javascript,jquery,angularjs,jquery-ui,Javascript,Jquery,Angularjs,Jquery Ui,我有字符串logo.cr.Button和函数 logo.cr.Button = function(){ //something } var strg = 'logo.cr.Button'; strg(); 现在我必须让这个字符串成为一个函数调用 像strg()但是它在说 strg不是构造函数 这里这行不通,因为JavaScript认为您使用的是点表示法。编写logo.cr.Button()JavaScript正在对象cr中查找函数Button(),该函数位于对象logo中 我建议将名称更改
logo.cr.Button
和函数
logo.cr.Button = function(){
//something
}
var strg = 'logo.cr.Button';
strg();
现在我必须让这个字符串成为一个函数调用
像strg()代码>但是它在说
strg不是构造函数
这里这行不通,因为JavaScript认为您使用的是点表示法。编写logo.cr.Button()
JavaScript正在对象cr
中查找函数Button()
,该函数位于对象logo
中
我建议将名称更改为logoCrButton=function()…
,因为JavaScript认为您使用的是点表示法。编写logo.cr.Button()
JavaScript正在对象cr
中查找函数Button()
,该函数位于对象logo
中
我建议将名称更改为logoCrButton=function()…
您可以使用,但不建议这样做。
安全问题只是一个原因,因为用户可能会利用此漏洞执行不应该执行的不同代码。毫无疑问,它得到了充分的解释
var logo={cr:{};
logo.cr.Button=函数(){
console.log(“某物”);
}
var string=“logo.cr.Button()”;
eval(字符串)代码>您可以使用,但不推荐使用。
安全问题只是一个原因,因为用户可能会利用此漏洞执行不应该执行的不同代码。毫无疑问,它得到了充分的解释
var logo={cr:{};
logo.cr.Button=函数(){
console.log(“某物”);
}
var string=“logo.cr.Button()”;
eval(字符串)代码>使用eval(“logo.cr.Button”)()
这将执行函数,当然,如果您有如下对象:
var logo = {
cr: {
}
};
使用eval(“logo.cr.Button”)()
这将执行函数,当然,如果您有如下对象:
var logo = {
cr: {
}
};
通常,在编写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);
}
现在将其转换为构造函数语法:
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()");
我好像无法格式化这个,因为我在手机上。但我会尽快完成。通常,当我们编写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);
}
现在将其转换为构造函数语法:
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()");
我好像无法格式化这个,因为我在手机上。但是我会尽快的。编辑了我的问题,请再次检查。不工作@thomas说没有功能听起来像一个。你为什么一开始就要这么做?提供有关您试图解决的更高级别问题的更多详细信息solve@Waqar当前位置我忘了名字间距问题,我的错。是的,有人建议@thomas Ty编辑我的问题。请再次检查@thomas says not a Function听起来像一个。你为什么一开始就要这么做?提供有关您试图解决的更高级别问题的更多详细信息solve@Waqar:我忘了名字间距的问题,我的错。是的,那是有人推荐@thomas Ty如果这不是一个好的做法,我为什么要用这个希望我的第二个例子也适合你的问题。如果这不是一个好的做法,我为什么要用这个希望我的第二个例子也适合你的问题。谢谢你的帮助。你不应该使用eval
或新功能
。一般来说,如果新函数
将访问此函数范围之外的变量,这是一个坏主意,因为如果您需要使用Transilar或缩小脚本,这将导致意外行为。@t-niese我知道没有使用eval,但我用了一个新的函数和一个transpiler和一个min脚本,没有任何问题。如果您担心作用域,您可以简单地将适当的上下文绑定到函数中,或者将其作为参数传入。我真的不认为“你不应该”这句话有任何理由。如果你能更详细地指出你为什么这么想,我会很高兴的。eval
和newfunction
也有同样的问题。两者都在运行时将字符串转换为代码。因此,每个transpiler、minification或linting脚本在处理代码时通常会忽略这些字符串。如果transpiler或缩小脚本重命名了徽标。
,则以字符串形式给出的代码将不会更改,并且将失败。所以如果