2014-11-23 45 views
5

我想找到一個Javascipt對象的類型(構造函數的名稱),但我一直只用一個通用的「對象」返回所有我嘗試過的方法。我在網上搜索,沒有找到我的Javascript方法,但還是有效。它始終只是返回對象構造函數類型作爲通用的「對象」。然而,當我在Chrome控制檯中檢查它時,它正盯着我。任何想法如何我可以在JS中獲取這些信息?Chrome控制檯和Javascript對象類型

PS。我使用Browserify的要求分開我的代碼,如果這有所作爲。

enter image description here

我想這可能是因爲require代碼如何Browserify負載是因爲這是輸出我從Browserify加載構造函數中得到的理由是:

enter image description here

這裏是我從手動創建構造函數得到的結果:

enter image description here

無論如何也不管我如何創建我的構造函數var Prey = function() {} vs var Prey = function Prey() {}即使Javascript似乎不知道,Chrome開發工具似乎仍然知道構造函數的名稱是什麼。也許這是因爲他們可以用JavaScript語言無法訪問的方式檢查虛擬機中的代碼,但我想知道我是否缺少某些東西。 有誰知道另一種方式來確定在Javascript中的實例類型?

+3

請表明對象是如何構建的。 – thefourtheye 2014-11-23 03:25:49

+0

看起來似乎任何構造的'obj'都沒有正確設置'constructor'屬性。 – 2014-11-23 06:27:27

+0

@thefourtheye增加了關於構造函數的更多信息。希望提供更好的上下文。謝謝! – ootoovak 2014-11-30 05:35:44

回答

1

你看到的獵物是獵物當你做function Prey(){};,因此,函數名稱是獵物。如果將Prey定義爲var Prey = function(){};,則函數名稱爲「」;

所以基本上如果你想使用函數名,你必須給你的構造函數一個名字。 var Prey = function Prey(){};

編輯:或者它可能是你做的這個變化:

var A = function NAMED(){}; 
var B = function(){}; 
B.prototype = Object.create(A.prototype); 
var o = new B(); 

> o 
< B {}; 

> o.constructor.name 
< "NAMED" 
+0

這是否解釋了爲什麼obj.constructor.name是「對象」? – arcyqwerty 2014-11-23 05:15:10

+0

但它不會顯示爲Prey ...即使您通過'obj .__ proto__ = Prey.prototype'手動設置原型,它也會設置構造函數名稱和控制檯顯示。 – arcyqwerty 2014-11-23 05:47:10

相關問題