2016-10-13 99 views
1

以下代碼如何遍歷所有屬性inc。例如[Symbol.iterator]

a = { 
    b() {return 3;}, 
    [Symbol.iterator]() {return 4;} 
}; 

console.log (a ['b']); 
console.log (a [Symbol.iterator]); 

console.log (111); 
for (var attrib in a) { 
    console.log (attrib); 
    console.log (a [attrib]); 
} 
console.log (222); 

打印

function b() {return 3;} 
function() {return 4;} 
111 
b 
function b() {return 3;} 
222 

爲什麼是第二函數,返回4中未打印在for循環。 如何製作一個所有屬性都打印的for-loop,包括特殊的屬性,如[Symbol.iterator]?

N.B.問題不在於如何編寫正確的迭代器函數,我知道我沒有這樣做。

+1

Symbol.iterator是*符號*,你無法一一列舉這樣的,你必須使用Object.getOwnPropertySymbols(your_object)一一列舉。 – Azamantes

+0

偉大,謝謝。請重新提交作爲答案,以便我可以信任你! –

回答

2

Symbol.iterator是一個符號,你無法一一列舉這樣的,你必須使用Object.getOwnPropertySymbols(your_object)一一列舉。

對於... ...在循環列表確實對象的屬性,但符號是有點不同種類的野獸,他們需要特殊的處理。