Javascript:获取包含点的构造函数名



在控制台中运行以下代码:

let Func1 = function () {};
let f1 = new Func1();
let Namespace = {};
Namespace.Func2 = function (a, b) {};
let f2 = new Namespace.Func2();
console.log(f1.constructor.name);
console.log(f2.constructor.name);

得到以下输出:

Func1.      --> as expected
            --> empty string!

我几乎要放弃了,但后来我意识到,当在控制台中只输入f1f2时,这是输出:

> f1
  Func1 {}
> f2
  Namespace.Func2 {}

控制台如何知道f2Namespace.Func2的一个实例?

因此,给定实例对象,必须有一种方法将构造函数名称作为字符串获取。有人能解释一下吗?


你可以运行f2 instanceof Namespace.Func2,它将返回true,但我不想认为控制台循环遍经过每个可能的类。

有一种方法来"别名";构造函数名称:Namespace.Func3 = function Func_Alias () {};,但这不是我想要的。我想检索原始名称,如控制台中所示。

我正在使用Chrome。在Firefox中,你无法在控制台中获得这两个函数的名称。

我认为这是javascript解释器在处理匿名函数定义的变量声明中的赋值时定义的特定行为。

let f1 = function(){}

注意,如果它不是一个匿名函数,它就不会发生。或者你赋值的变量已经包含了对函数的引用。

相关内容

最新更新