什么样的浏览器控制台显示你似乎化妆品被确定:
- 的构造函数的
name
财产,或
- 变量名,构造函数最初分配到(如果没有设置
name
)。
案例#1:
var ClassA = function ClassB() {};
new ClassA();
// reports a `ClassB` object
构造函数有name
属性设置为ClassB
,所以这就是Chrome的报告。函数的name
只能在定义时间设置,所以function funcName(){}
设置为name
,而func=function(){}; f.name='funcName';
则不设置。
案例2:
var ClassA = function() {};
ClassB = ClassA;
new ClassB();
// reports a `ClassA` object
构造最初分配给ClassA
,故以为名似乎烧入构造函数,即使它在另一个变量别名使用。事实上,这样做delete window.ClassA
不会从报告本身作为ClassA的对象停止新建对象:
var ClassA = function() {};
ClassB = ClassA;
delete window.ClassA;
new ClassB();
// still reports a `ClassA` object
// even though `ClassA` is no longer a defined variable name
这就是你的“动态定义的”情况发生。最初的window[type] = function() {};
行会永久标记该构造函数的结果对象,以标识为类型“anonymous function that's a property of window
”。
请注意,这些控制台化妆品不会影响程序的功能,因为所有对象/原型功能仍按预期工作。
无法重现。 http://i.imgur.com/68DUI.png ..对我来说,它们都显示为'window.Animal'的实例。 – James
我的不好,我已经过分简化了。似乎你需要在变量中重现类型名称。你可以再试一次吗? –
更新后也无法重现。对我而言,这两个变量都具有'window。(匿名函数)'类型。 –