什麼樣的瀏覽器控制檯顯示你似乎化妝品被確定:
- 的構造函數的
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。(匿名函數)'類型。 –