在控制台中运行以下代码:
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!
我几乎要放弃了,但后来我意识到,当在控制台中只输入f1
和f2
时,这是输出:
> f1
Func1 {}
> f2
Namespace.Func2 {}
控制台如何知道f2
是Namespace.Func2
的一个实例?
因此,给定实例对象,必须有一种方法将构造函数名称作为字符串获取。有人能解释一下吗?
你可以运行f2 instanceof Namespace.Func2
,它将返回true,但我不想认为控制台循环遍经过每个可能的类。
有一种方法来"别名";构造函数名称:Namespace.Func3 = function Func_Alias () {};
,但这不是我想要的。我想检索原始名称,如控制台中所示。
我正在使用Chrome。在Firefox中,你无法在控制台中获得这两个函数的名称。
我认为这是javascript解释器在处理匿名函数定义的变量声明中的赋值时定义的特定行为。
let f1 = function(){}
注意,如果它不是一个匿名函数,它就不会发生。或者你赋值的变量已经包含了对函数的引用。