2013-03-13 74 views
1

我想獲得某個類的所有靜態成員的列表。例如:我想獲得Object的所有靜態成員(如Object.create如果有效等)。我怎樣才能做到這一點?如何獲得javascript中所有靜態成員的列表

例子:

var ClassA = function(){} 
ClassA.prototype.getName = function(){return "ClassA";} //public method 
ClassA.alertName = function(){ alert("ClassA");} //static method 
ClassA.doSomething = function(){return "Do something";} //another static method 

所以,如果我得到了更多的靜態成員,我想獲得其中至少有名字。在這個例子中,我想獲得alertNamedoSomething。對於公衆成員,你可以這樣做:

for (i in ClassA.prototype) { 
    alert(i); 
} 

如何使用靜態成員?

+4

你剛剛說了4次同樣的事情(包括你的標題)。我認爲這是一個新記錄 – Ian 2013-03-13 16:00:46

+1

嘗試https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys **或** https://developer.mozilla.org/en- US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames(取決於你想要的) – Ian 2013-03-13 16:04:49

+0

對不起。你可以通過這樣的方式獲得公共成員:for(var i in obj){alert(i +「:」+ obj [i]);}但是它與類不同。我會檢查你的建議,但是我發現瀏覽器兼容性問題(例如,僅支持ie9) – AlFra 2013-03-13 16:16:58

回答

2

你是如何檢查他們?

爲什麼你不能只使用相同的迭代器來通過你的實際類?

var key = ""; 
for (key in MyClass) { console.log(key); } 

這不是你的日常用語。
實際上,JS中的所有東西都是一個對象,包括函數/構造函數。

因此,在這裏看起來像「公共靜態」的東西實際上只是一個對象的方法,它可以像任何其他對象一樣迭代。

另外:原型是公共靜態的。
如果您將一個屬性原型化到您的實例中,那麼所有實例都具有對該屬性完全相同的引用,並且該屬性的修改將改變其他人的引用。

+0

你對此絕對正確。它困擾着我,爲什麼我不能以Object這種方式得到結果(Object.create,例如...)但是如果typeof不是「undefined」,應該存在類似Object.create的東西。 – AlFra 2013-03-13 17:24:51

+0

因爲它是一個本地對象,並且它被隱藏的屬性鎖定,這些屬性在ECMAScript5之前從不向最終用戶公開。 – Norguard 2013-03-13 17:28:38

+0

編輯:非常感謝你。現在我可以回到我的代碼:) tnx了! – AlFra 2013-03-13 17:29:07