2012-09-22 55 views
2

我希望能夠通過所有迭代對象的成員。是這樣的:javascript對象的成員是否可以迭代完整?

function reflect(obj) { 
var str = ""; 
for (member in obj) { str += (member + "\n"); } 
return str; 
} 

可枚舉標誌可防止許多成員在循環apear了。 我的問題是:

  1. 有另一種方式,通過一個對象的成員,迭代暴露所有這些的?

  2. 如果沒有,是否有一些訪問這些標誌? (可以設置可枚舉爲真?)

  3. 是有辦法以暴露原型鏈,並確定哪些成員屬於哪個祖先?

+0

http://stackoverflow.com/questions/8024149/is-it-possible-to-get-the-non-enumerable-inherited-property-names-of-an-object – Brad

回答

1

您可以使用getOwnPropertyNames。無論可枚舉選項如何,它都返回所有屬性。

var objectProperties = Object.getOwnPropertyNames(obj); 

更新這僅適用於使用Javascript 1.8.5和更新! (謝謝@Kiyura)

+0

請注意,這隻適用於Javascript 1.8.5或更高版本。 (ES5) – jrajav

+0

這是,謝謝,我將它添加到我的答案完整性 – Asciiom

+0

這很不錯,謝謝!所以它返回的是沒有被繼承的屬性..雖然它不計入函數,但是像in-in一樣......但是看到事件處理程序(比如onclick)不被視爲函數是很有趣的,除非它們實際上具有分配給它們的函數(如果你檢查他們的類型,他們聲稱是一個對象..) –