2015-04-20 5 views
6

मैं ऑब्जेक्ट शाब्दिक के रूप में जेनरेटर विधि बनाने के लिए प्रतीत नहीं कर सकता।क्या node.js में ऑब्जेक्ट शाब्दिक में ES6 जेनरेटर विधि निर्दिष्ट करने का कोई तरीका है?

यहाँ मेरे कार्य स्रोत कोड है:

function *getRecords (data) { 
    for (var i = 0; i < data.length; i++) { 
     yield data[i]; 
    } 
} 
var records = getRecords(data); 
for (var record of records) { 
    // process my record 
} 

लेकिन जब मैं वस्तु में मेरी जनरेटर विधि शाब्दिक ले जाने:

var myobj = { 
    *getRecords: function (data) {...} 
} 

मैं SyntaxError: Unexpected token *

मिल रहा उद्धरण जोड़ देते हैं तो

var myobj = { 
    '*getRecords': function (data) {...} 
} 

मैं: SyntaxError: Unexpected strict mode reserved word

मैं --harmony विकल्प के साथ v0.12.2 NodeJS runnng हूँ, लेकिन कोई फर्क नहीं पड़ता कि मुझे क्या करना है, मैं यह काम करना आरंभ नहीं कर पा रहे।

उत्तर

7

*function कीवर्ड के बाद किया जाना चाहिए, इस

var myobj = { 
    getRecords: function* (data) {} 
} 

for (var record of myobj['getRecords']()) {} 

Draft version of ECMA Script - 6's definition for Generator Expression,

समारोह * (FormalParameters [यील्ड, GeneratorParameter]) {

का हवाला देते हुए की तरह जेनरेटर बॉडी

}

नोट: जेनरेटर अभिव्यक्ति जेनरेटर समारोह से अलग है। जब आप इसे एक चर के लिए असाइन करते हैं या इसे ऑब्जेक्ट शाब्दिक में एक कुंजी से जोड़ते हैं, तो आप वास्तव में जनरेटर अभिव्यक्ति असाइन कर रहे हैं। सामान्य जनरेटर घोषणा इस

function * GeneratorFunctionName(...) { 
} 
+0

कैसे 'वर्ग {}' वाक्य रचना में जनरेटर बनाने के लिए? उस वाक्यविन्यास में कोई 'फ़ंक्शन' कीवर्ड नहीं है। – Finesse

8

एक @thefoureye पहले से ही उत्तर है, अगर आप समारोह भाव का उपयोग कर रहे है तो आप function टोकन के बाद * टोकन सही जगह करना होगा की तरह हो जाएगा।

हालांकि, आप ऑब्जेक्ट अक्षरों में विधि परिभाषाओं का भी उपयोग कर सकते हैं। यहाँ, आप वास्तव में जनरेटर विधि नाम से पहले * को रखना होगा, फिर भी हर विधि परिभाषा के साथ के रूप में यह बृहदान्त्र और function कीवर्ड शामिल नहीं है:

var myobj = { 
    *getRecords(data) { 
     … 
    } 
}; 
1

यहाँ कैसे सादे वस्तु परिभाषा यह करने के लिए:

var myobj = { 
    getRecords: function* (data) {...} 
} 

यहाँ कैसे ES6 वर्ग परिभाषा यह करने के लिए:

class MyClass { 
    * getRecords(data) {...} 
} 
var myobj = new MyClass(); 
संबंधित मुद्दे

 संबंधित मुद्दे