Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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 - Fatal编程技术网

Javascript 如何在函数体中获取函数对象?

Javascript 如何在函数体中获取函数对象?,javascript,Javascript,在函数执行时,是否有方法获取函数对象? 我正在为函数分配属性,并希望访问它们。“这个”没用。比如: a.b=function(){...code...}; a.b.c=100; 我想从函数中的代码访问a.b.c,而不知道它自己的名称。“this”指的是a。怎样才能得到b 我试着将函数绑定到他自己的对象上,但做不到 多谢各位 我添加了这个示例,我必须在几个不同的“字符串”和“某些特定值”之后重复: 为此,您可以使用一个: var a={}; a、 b=函数myFunc(){ console.l

在函数执行时,是否有方法获取函数对象? 我正在为函数分配属性,并希望访问它们。“这个”没用。比如:

a.b=function(){...code...};
a.b.c=100;
我想从函数中的代码访问a.b.c,而不知道它自己的名称。“this”指的是a。怎样才能得到b

我试着将函数绑定到他自己的对象上,但做不到

多谢各位

我添加了这个示例,我必须在几个不同的“字符串”和“某些特定值”之后重复:

为此,您可以使用一个:

var a={};
a、 b=函数myFunc(){
console.log(myFunc.c);
};
a、 b.c=100;

a、 b()获取当前函数有两种方法

var a = {};
a.b = function () {
  console.log(arguments.callee.c);
};
a.b.c = 100;
a.b();
一种是
参数的“几乎不推荐”用法。在函数体中,它总是指这个函数

var a = {};
a.b = function () {
  console.log(arguments.callee.c);
};
a.b.c = 100;
a.b();
参数。在严格模式下禁止被调用方

第二个是用作JLRishe

参数。被调用方
利弊 优点:

  • 它可以安全地与
    绑定
    函数一起使用(
    参数。被调用方
    指绑定函数)
  • 它可以与使用
    新函数创建的函数一起使用
缺点:

  • 由于禁用某些优化,它可能会减慢您的程序
  • 这被认为是几乎不赞成的
  • 它不能在严格模式下使用
命名函数表达式的优缺点 优点:

  • 它比
    参数快。被调用方
  • 更容易理解它是如何工作的
缺点:

  • 对于绑定函数,它将无法按预期工作(
    functionName
    将引用原始函数,而不是绑定函数)
  • 它不能用于使用
    新函数创建的函数中

谢谢您的回答。我必须强调我不知道b的名字。实际上,我正在用相同的函数定义创建许多方法(如b),从变量中分配不同的名称,在相同的“a”对象和其他对象(如a)。@YoArgentino如果你再看一看,我想你会发现我没有在函数定义的任何地方使用
b
。我相当肯定上述内容正是您所要求的。再次感谢您的快速回答。我想从函数中的代码访问a.b.c,而不知道它自己的名称。我不能在代码中使用函数名。@Yoargentno您误解了命名函数表达式的工作方式。我在帖子中解释了这一点,但名称
myFunc
仅存在于函数中,不能更改。只要你在
函数
()
之间加上一个名字,函数就会知道自己的名字。@YoArgentino如果你仍然不相信我,请提供一个你认为命名函数表达式不起作用的场景的示例。我认为在这个功能运行正常的情况下使用不推荐的功能是非常愚蠢的。非常感谢。我知道争论是不赞成的,但现在看来这是正确的方法。在我的例子中,当我绑定函数时,另一种方法是将对象作为固定参数传递,并向其添加一个属性,该属性引用新的绑定函数。很奇怪。我正在寻找一种替代方法,就像你给我的那样。可以将命名函数表达式与
新函数一起使用。它只需要一点聪明:IE@jlRise也有问题,然后它变成了一个最简单的
eval
,你失去了
新函数的所有优点(例如,简单的验证是用户提供的代码是有效的JavaScript而不执行它)。@Ginden我以为我们在谈论自引用函数。这与验证用户提供的代码有什么关系?