Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.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/0/asp.net-mvc/15.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_Reflection - Fatal编程技术网

Javascript—获取定义函数的函数或控件结构

Javascript—获取定义函数的函数或控件结构,javascript,reflection,Javascript,Reflection,我在另一个函数中定义了一个函数,如下所示: var bar; function foo() { bar = function() { // This should output the full source code of foo() } } bar(); 当我调用bar()时,它应该将定义它的函数foo()的完整源代码输出到控制台。要实现此行为,bar()中应该包含哪些代码 在我完成了这一部分之后,我将如何通过只调用bar()来进一步查看链中定义了什么函数

我在另一个函数中定义了一个函数,如下所示:

var bar;
function foo() {
    bar = function() {
        // This should output the full source code of foo()
    }
}

bar();
当我调用bar()时,它应该将定义它的函数foo()的完整源代码输出到控制台。要实现此行为,bar()中应该包含哪些代码

在我完成了这一部分之后,我将如何通过只调用bar()来进一步查看链中定义了什么函数foo()(等等)

谢谢


编辑:请不要用非建设性的回答,如“你不应该这样做”或“你永远不会需要这个”。如果我不需要它,我就不会问了。

你在寻找类似的答案吗?只要您从foo()运行bar(),这应该可以工作

function foo() {
    self = foo;
    function bar() {
        console.log(self.toString());
    }
    bar();
}
foo();

您可以在这里进行测试:

否,因为这实际上只是硬编码。它应该能够在不知道名称的情况下获取其父源。另外,我将在所有控制结构之外单独调用bar()。我更新了我的小提琴,这更符合您的要求吗?我不确定您的用例是什么,所以很难满足我的代码对您的需求。您计划如何在foo()范围之外调用bar()?bar()只在foo()的范围内定义,因此硬编码似乎是合适的。不,最后,我只想自己调用bar()。我更新了我的帖子,使之更加清晰。另外,bar中不应该硬编码foo这个名称,这完全违背了我的想法,此时我只需在函数外部调用foo.toString()。试试你的代码。无法访问bar(),因为必须在foo()的范围内才能访问它。否则它是未定义的。这是你的根本缺陷。你试图向上移动范围,没有充分的理由。给我们一些你需要的真实代码,也许我们可以帮助你更多。bar可以在范围之外声明,这应该不是问题。如果它没有实际应用程序,我就不会这么做。你不知道一切。如果你需要将调用函数作为字符串获取,或者需要将所述函数中的函数名作为字符串获取,那么请再次阅读注释。你做了一些错误的事情,因为你永远不需要这些,这就是为什么也无法获取它。你如何知道我是否需要将函数作为字符串获取?你根本不知道我的用例是什么。我要爱那些假设他们知道人们应该或不应该需要什么样的代码的人,而对他们的用例一无所知。我不是说你不需要它,我是说如果你需要它,你可能是做错了什么。没有理由必须这样做,这就是为什么没有办法这样做的原因,事实上,在严格和更新版本的ecma中,可能会删除一些这样做的方法,因为没有理由访问被调用方或在更高范围内获取函数的名称或字符串表示,这只是一种不好的做法。我只是想告诉你,你应该重新考虑,并试图找到另一种方法来做你需要做的事情,而你有点粗鲁。