Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使javascript字符串成为函数调用_Javascript_Jquery_Angularjs_Jquery Ui - Fatal编程技术网

如何使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或缩小脚本重命名了
徽标。
,则以字符串形式给出的代码将不会更改,并且将失败。所以如果