Javascript 从js对象获取更多信息

Javascript 从js对象获取更多信息,javascript,Javascript,我可以通过如下操作获得属于特定js对象的所有函数和参数的列表:- x=IDBKeyRange.only 43;对于x{console.logeach中的var each, x[每个];} 有什么方法可以获得有关函数的更多信息,例如每个函数接受的参数数量等?函数的length属性给出声明中形式参数的数量,尽管这不一定与函数接受的参数数量相同。除非进行一些静态/动态分析,否则无法真正解决这个问题 函数的.toString方法返回源代码。这在任何标准中都没有,但在我所知道的所有工作环境中都是这样。当然

我可以通过如下操作获得属于特定js对象的所有函数和参数的列表:-

x=IDBKeyRange.only 43;对于x{console.logeach中的var each, x[每个];}

有什么方法可以获得有关函数的更多信息,例如每个函数接受的参数数量等?

函数的length属性给出声明中形式参数的数量,尽管这不一定与函数接受的参数数量相同。除非进行一些静态/动态分析,否则无法真正解决这个问题

函数的.toString方法返回源代码。这在任何标准中都没有,但在我所知道的所有工作环境中都是这样。当然,您无法获得内置函数的源代码。通过在运行时检查函数源代码,试图使除实验性/诊断性/调试性代码之外的任何代码都能正常工作,这可能表明了一些严重的设计问题:-

函数的length属性给出了声明中形式参数的数量,虽然这不一定与函数接受的参数数量相同。除非进行一些静态/动态分析,否则无法真正解决这个问题

函数的.toString方法返回源代码。这在任何标准中都没有,但在我所知道的所有工作环境中都是这样。当然,您无法获得内置函数的源代码。此外,通过在运行时检查函数源代码,试图使实验/诊断/调试代码以外的任何代码正常工作,这可能表明存在一些严重的设计问题:-

我可以通过如下操作获得属于特定js对象的所有函数和参数的列表:-

这将为您提供对象的可枚举属性,其中可能不包含很多内容。例如,如果在数组上执行此操作,则不会看到push,因为在本例中,它是数组原型的不可枚举属性,但它同时适用于自身属性和继承属性

有没有什么方法可以让我获得更多关于函数的信息,比如每个函数接受的参数数量等

您可以使用函数实例的参数获取函数的arity和声明参数的数量。例如:

console.log("The arity of [].push is " + [].push.length);
但是,重要的是要记住,JavaScript函数可能通过接受可变数量的参数,因此arity可能无法提供完整的情况

我可以通过如下操作获得属于特定js对象的所有函数和参数的列表:-

这将为您提供对象的可枚举属性,其中可能不包含很多内容。例如,如果在数组上执行此操作,则不会看到push,因为在本例中,它是数组原型的不可枚举属性,但它同时适用于自身属性和继承属性

有没有什么方法可以让我获得更多关于函数的信息,比如每个函数接受的参数数量等

您可以使用函数实例的参数获取函数的arity和声明参数的数量。例如:

console.log("The arity of [].push is " + [].push.length);

不过,记住一点很重要,JavaScript函数可能会通过接受可变数量的参数,因此arity可能不会告诉您全部情况。

您可以在web浏览器中运行调试模式。并使用jquery限定符访问对象。

您可以在web浏览器中运行调试模式。并使用jquery限定符访问对象。

while.length似乎适用于我定义的函数,它似乎不能像IDBKeyRange.only.lengthit打印0那样工作-你能解释一下这种行为吗?@uki:想必,不管是什么只添加到你的环境中,JavaScript中没有标准的纯函数定义它,没有任何形式参数。也许它只使用了我在回答中提到的arguments对象。呃,没有双关语.while.length似乎适用于我定义的函数,它似乎不适用于IDBKeyRange.only.lengthit打印0-你能解释一下这种行为吗?@uki:大概不管是什么,它只添加到你的环境中,JavaScript中没有标准的纯函数在没有任何形式参数的情况下定义它。也许它只使用了我在回答中提到的arguments对象。呃,不是双关语。@T.J.Crowder是的,你是对的;我在重新倒咖啡的时候正在考虑这个问题:-我再补充一句。@T.J.Crowder是的,你是对的;我在重新倒咖啡的时候正在考虑这个问题:-我要补充一下。