aboutsummaryrefslogtreecommitdiff
path: root/files/de/web/javascript/reference/global_objects/generator/index.html
blob: af21ef18f8670af0868218027e0c65ab74013f62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
---
title: Generator
slug: Web/JavaScript/Reference/Global_Objects/Generator
tags:
  - ECMAScript 2015
  - Generator
  - JavaScript
  - Legacy Generator
  - Legacy Iterator
  - Reference
translation_of: Web/JavaScript/Reference/Global_Objects/Generator
---
<div>{{JSRef}}</div>

<p>Das <code><strong>Generator</strong></code> Objekt wird von der {{jsxref("Statements/function*", "Generator Function", "", 1)}} zurückgegeben und entspricht beidem, dem <a href="/de/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol">Iterable Protokoll</a> und dem <a href="/de/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterator_protocol">Iterator Protokoll</a>.</p>

<h2 id="Syntax">Syntax</h2>

<pre class="syntaxbox">function* gen() {
  yield 1;
  yield 2;
  yield 3;
}

var g = gen(); // "Generator { }"</pre>

<h2 id="Methoden">Methoden</h2>

<dl>
 <dt>{{jsxref("Generator.prototype.next()")}}</dt>
 <dd>Gibt einen Wert vom Generator zurück (ausgelöst durch {{jsxref("Operators/yield", "yield")}}).</dd>
 <dt>{{jsxref("Generator.prototype.return()")}}</dt>
 <dd>Gibt den gegebene Wert zurück und beendet den Generator.</dd>
 <dt>{{jsxref("Generator.prototype.throw()")}}</dt>
 <dd>Erzeugt einen Fehler im Generator (beendet auch den Generator, wenn der Fehler nicht im Generator abgefangen wird).</dd>
</dl>

<h2 id="Beispiele">Beispiele</h2>

<h3 id="Ein_unendlicher_Iterator">Ein unendlicher Iterator</h3>

<pre class="brush: js">function* idMaker() {
    var index = 0;
    while(true)
        yield index++;
}

var gen = idMaker(); // "Generator { }"

console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
// ...</pre>

<h2 id="Veraltete_Generatorobjekte">Veraltete Generatorobjekte</h2>

<p>Firefox (SpiderMonkey) hat eine frühe Version der Generatoren in <a href="/de/docs/Web/JavaScript/New_in_JavaScript/1.7">JavaScript 1.7</a> implementiert, bei der kein Stern (*) in der Funktionsdeklaration nötig war (man benutzte nur das <code>yield</code> Schlüsselwort im Funktionsrumpf). Seit Firefox 58 (Released am 23. Januar 2018) sind diese veralteten Generatoren entfernt ({{bug(1083482)}}).</p>

<h3 id="Veraltete_Generator_Methoden">Veraltete Generator Methoden</h3>

<dl>
 <dt><code>Generator.prototype.next() </code>{{non-standard_inline}}</dt>
 <dd>Gibt einen Wert vom {{jsxref("Operators/yield", "yield")}} Ausdruck zurück. Diese korrespondiert mit der <code>next()</code> Methode in ES2015 Generator Objekt.</dd>
 <dt><code>Generator.prototype.close()</code> {{non-standard_inline}}</dt>
 <dd>Beendet einen Generator, so dass der Aufruf von <code>next()</code> zu einem {{jsxref("StopIteration")}} Fehler führt. Diese korrespondiert mit der <code>return()</code> Methode in ES2015 Generator Objekt.</dd>
 <dt><code>Generator.prototype.send()</code> {{non-standard_inline}}</dt>
 <dd>Wird benutzt, um einen Wert zum Generator zu senden. Der wert wird vom {{jsxref("Operators/yield", "yield")}} Ausdruck zurückgegeben und gibt einen Wert vom nächsten {{jsxref("Operators/yield", "yield")}} Ausdruck zurück. Diese korrespondiert mit der <code>next(x)</code> Methode in ES2015 Generator Objekt.</dd>
 <dt><strong><code>Generator.</code></strong><code>prototype.</code><strong><code>throw()</code> </strong> {{non-standard_inline}}</dt>
 <dd>Erzeugt einen Fehler im Generator. Diese korrespondiert mit der <code>throw()</code> Methode in ES2015 Generator Objekt.</dd>
</dl>

<h3 id="Veraltete_Generator_Beispiele">Veraltete Generator Beispiele</h3>

<pre class="brush: js">function fibonacci() {
  var a = yield 1;
  yield a * 2;
}

var it = fibonacci();
console.log(it);          // "Generator {  }"
console.log(it.next());   // 1
console.log(it.send(10)); // 20
console.log(it.close());  // undefined
console.log(it.next());   // throws StopIteration (as the generator is now closed)
</pre>

<h2 id="Spezifikationen">Spezifikationen</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Spezifikation</th>
   <th scope="col">Status</th>
   <th scope="col">Kommentar</th>
  </tr>
  <tr>
   <td>{{SpecName('ES2015', '#sec-generator-objects', 'Generator objects')}}</td>
   <td>{{Spec2('ES2015')}}</td>
   <td>Initiale Definition.</td>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-generator-objects', 'Generator objects')}}</td>
   <td>{{Spec2('ESDraft')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

<h2 id="Browserkompatibilität">Browserkompatibilität</h2>



<p>{{Compat("javascript.builtins.Generator")}}</p>

<h2 id="Siehe_auch">Siehe auch</h2>

<h3 id="Veraltete_Generatoren">Veraltete Generatoren</h3>

<ul>
 <li>{{jsxref("Statements/Legacy_generator_function", "Die veraltete Generator Function", "", 1)}}</li>
 <li>{{jsxref("Operators/Legacy_generator_function", "Der veraltete Generator Functionsausdruck", "", 1)}}</li>
 <li>{{jsxref("StopIteration")}}</li>
 <li><a href="/de/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features/The_legacy_Iterator_protocol">The legacy Iterator protocol</a></li>
</ul>

<h3 id="ES2015_Generatoren">ES2015 Generatoren</h3>

<ul>
 <li>{{jsxref("Functions", "Functions", "", 1)}}</li>
 <li>{{jsxref("Statements/function", "function")}}</li>
 <li>{{jsxref("Operators/function", "function Ausdruck")}}</li>
 <li>{{jsxref("Function")}}</li>
 <li>{{jsxref("Statements/function*", "function*")}}</li>
 <li>{{jsxref("Operators/function*", "function* Ausdruck")}}</li>
 <li>{{jsxref("GeneratorFunction")}}</li>
 <li><a href="/de/docs/Web/JavaScript/Guide/The_Iterator_protocol">The Iterator protocol</a></li>
</ul>