aboutsummaryrefslogtreecommitdiff
path: root/files/de/web/javascript/reference/classes/static/index.html
blob: f9ba577d7b4d98dcc35ed2e5bd051977118d3527 (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: Statische Methoden
slug: Web/JavaScript/Reference/Classes/static
tags:
  - Classes
  - ECMAScript 2015
  - JavaScript
  - Static
translation_of: Web/JavaScript/Reference/Classes/static
original_slug: Web/JavaScript/Reference/Klassen/static
---
<div>{{jsSidebar("Classes")}}</div>

<p>Das <code><strong>static</strong></code> Schüsselwort definiert statische Methoden für eine Klasse.</p>

<div>{{EmbedInteractiveExample("pages/js/classes-static.html")}}</div>



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

<pre class="syntaxbox">static methodenName() { ... }</pre>

<h2 id="Beschreibung">Beschreibung</h2>

<p>Statische Methoden werden ohne Instanzierung einer Klasse aufgerufen und sind über eine erzeugte Instanz nicht aufrufbar. Oft werden in statische Methoden für Hilfsfunktionen verwendet.</p>

<h2 id="Aufruf_von_statischen_Methoden">Aufruf von statischen Methoden</h2>

<h3 id="Von_einer_anderen_statischen_Methode">Von einer anderen statischen Methode</h3>

<p>Um eine statische Methode aus einer anderen statischen Methode der gleichen Klasse aufzurufen, kann das <code><a href="/de/docs/Web/JavaScript/Reference/Operators/this">this</a></code> Schlüsselwort verwendet werden.</p>

<pre class="brush: js">class StaticMethodCall {
    static staticMethod() {
        return 'Static method has been called';
    }
    static anotherStaticMethod() {
        return this.staticMethod() + ' from another static method';
    }
}
StaticMethodCall.staticMethod();
// 'Static method has been called'

StaticMethodCall.anotherStaticMethod();
// 'Static method has been called from another static method'</pre>

<h3 id="Für_Klassenkonstruktoren_und_anderen_Methoden">Für Klassenkonstruktoren und anderen Methoden</h3>

<p>Statische Methoden sind mit dem <code><a href="/de/docs/Web/JavaScript/Reference/Operators/this">this</a></code> Schlüsselwort nicht direkt erreichbar von nicht statischen Methoden. Man kann sie mit dem Klassennamen aufrufen: <code>KLASSENNAME.STATISCH_METHODE_NAME</code> oder mit der Aufrufen einer Eigenschaft von <code>constructor</code>: <code>this.constructor.</code><code>STATISCH_METHODE_NAME</code>.</p>

<pre class="brush: js">class StaticMethodCall{
    constructor(){
        console.log(StaticMethodCall.staticMethod());
        // 'static method has been called'

        console.log(this.constructor.staticMethod());
        // 'static method has been called'
    }

    static  staticMethod(){
        return 'static method has been called.';
    }
}</pre>

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

<p>Das folgende Beispiel demonstriert mehrere Dinge:</p>

<ol>
 <li>Wie eine statische Methode in einer Klasse implementiert wird.</li>
 <li>Das von einer Klasse mit statischen Eigenschaften geerbt werden kann.</li>
 <li>Wie eine statische Methode aufgerufen werden kann und wie nicht.</li>
</ol>

<pre class="brush: js">class Triple {
  static triple(n) {
    if (n === undefined) {
      n = 1;
    }
    return n * 3;
  }
}

class BiggerTriple extends Triple {
  static triple(n) {
    return super.triple(n) * super.triple(n);
  }
}

console.log(Triple.triple());        // 3
console.log(Triple.triple(6));       // 18

var tp = new Triple();

console.log(BiggerTriple.triple(3));
// 81 (not affected by parent's instantiation)

console.log(tp.triple());
// 'tp.triple is not a function'.
</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-class-definitions', 'Class definitions')}}</td>
   <td>{{Spec2('ES2015')}}</td>
   <td>Initiale Definition.</td>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}</td>
   <td>{{Spec2('ESDraft')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

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



<p>{{Compat("javascript.classes.static")}}</p>

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

<ul>
 <li><a href="/de/docs/Web/JavaScript/Reference/Operators/class"><code>class</code> expression</a></li>
 <li><a href="/de/docs/Web/JavaScript/Reference/Statements/class"><code>class</code> declaration</a></li>
 <li><a href="/de/docs/Web/JavaScript/Reference/Classes">Classes</a></li>
</ul>