मैंने मोज़िला विकास नेटवर्क (एमडीएन) में कुछ खोदने का उपयोग किया है।
यह पता लगाने के लिए कि ऑब्जेक्ट्स obj.propertyIsEnumerable(prop)
विधि है, यह जांचने के लिए कि संपत्ति समृद्ध है या नहीं। एमडीएन में दिए गए उदाहरणों से, प्रोटोटाइप श्रृंखला के माध्यम से विरासत में प्राप्त गुण संख्यात्मक नहीं हैं, इस प्रकार विधि उन गुणों के लिए झूठी रिटर्न देती है।
गैर-संख्यात्मक गुणों का एक उदाहरण कन्स्ट्रक्टर और संपत्ति length
सरणी के गुण हैं।
प्रश्न के पुनरावर्तनीय हिस्से के लिए, मैं एमडीएन उद्धृत करूंगा: "ईसीएमएस्क्रिप्ट 6 में इटेबल एक इंटरफ़ेस (या दूसरे शब्दों में, एक प्रोटोकॉल) है, न कि ऑरे या मैप जैसे ऑब्जेक्ट का प्रकार।
यह कहना है कि ऑब्जेक्ट को इसके गुणों को लागू करने के लिए इस इंटरफ़ेस को कार्यान्वित करने की आवश्यकता है। स्ट्रिंग, ऐरे, मैप, सेट, वीकसेट और जेनरेटर ऑब्जेक्ट्स जैसे पुनरावृत्तियों में निर्मित यह मामला है।
निम्नलिखित कोड सचित्र इस:
var aString = "hello"
typeof aString[Symbol.iterator] // "function"
aString[Symbol.iterator]() + "" // "[object String Iterator]"
[...aString] // ["h", "e", "l", "l", "o"]
बेशक
, आप अपने खुद इटरेटर कार्यान्वयन परिभाषित कर सकते हैं।
प्रश्न पर वापस आना, ऑब्जेक्ट या उसके प्रोटोटाइप से जुड़े गुण (सीधे, अर्थात् विरासत के माध्यम से नहीं) को for...in
लूप में गणना के रूप में प्रदर्शित किया जाएगा। पुनरावृत्तियों के लिए आपको एक कार्यान्वयन की आवश्यकता है, या तो पहले उल्लिखित, या स्वयं का। एमडीएन से यहां एक महान उदाहरण है।
let arr = [ 3, 5, 7 ];
arr.foo = "hello";
for (let i in arr) {
console.log(i); // logs "0", "1", "2", "foo" these are property names or indexes
}
for (let i of arr) {
console.log(i); // logs "3", "5", "7" these are actual values of an
// iterable implementation provided by the array prototype
}
let
कीवर्ड एक var
परिभाषा को इस संदर्भ में बराबर है (हालांकि यह अधिक प्रभाव पड़ता है, लेकिन वे इस पद के दायरे से बाहर हैं)।
आप देख सकते हैं सरणी iterable
इंटरफेस (सरणी प्रोटोटाइप से) की पहले से ही एक कार्यान्वयन है, इस प्रकार यह अपने मूल्यों को जब for...of
पाश का उपयोग कर, जबकि foo
संपत्ति प्रदर्शित नहीं किया जाता पैदावार (न तो मूल्य है और न ही संपत्ति का नाम) ।
इसलिए यदि आपका ऑब्जेक्ट iterable
इंटरफ़ेस को कार्यान्वित नहीं करता है, तो यह पुनरावृत्त नहीं होना चाहिए (सिद्धांत रूप में) और इस प्रकार यह for...of
लूप में इसकी गुणों को प्रदर्शित करेगा।
मैं इसे googled है ... मैं कुछ भी सुझाव नहीं मिला है कि उस सटीक नाम के साथ एक विशेषता होगी। मैं बस सोच रहा हूं कि क्या वे मूल्यों को पुन: प्रयोज्य बनाने के लिए एक तरीका लागू करने की योजना हैं और कुंजियां अलग नहीं हैं, मैं थोड़ा और स्पष्ट –
बनाने के लिए अपना प्रश्न अपडेट करूंगा, तो आप शायद गलत जगह पर पूछ रहे हैं। ईएस 6 मेलिंग सूचियों पर पूछने से आपको जवाब देने की संभावना अधिक है। कोड जवाब के साथ कोड प्रश्न पूछने के बारे में Stackoverflow सबसे प्रमुख है। –
@ माइक'पोमैक्स 'कमरमैन को इसके बारे में कठोर होने की आवश्यकता नहीं है। एक तरफ दृष्टिकोण, इस सवाल के बारे में कुछ भी विषय नहीं है। सी ++ 11 का गठन होने पर हमने कई समान प्रश्न देखा। –