aboutsummaryrefslogtreecommitdiff
path: root/files/de/web/javascript/reference/functions/set/index.html
blob: 7b0e5fcd8342f5fb00ad545ca7de8f67e2cee169 (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
138
139
140
141
142
143
144
145
146
147
148
149
---
title: Setter
slug: Web/JavaScript/Reference/Functions/set
tags:
  - ECMAScript 5
  - Functions
  - JavaScript
translation_of: Web/JavaScript/Reference/Functions/set
---
<div>{{jsSidebar("Functions")}}</div>

<p>Die <strong><code>set</code></strong> Syntax bindet eine Objekteigenschaft an eine Funktion welche aufgerufen wird, wenn die Eigenschaft neu beschrieben wird.</p>

<div>{{EmbedInteractiveExample("pages/js/functions-setter.html")}}</div>



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

<pre class="syntaxbox">{set <em>prop</em>(<em>val</em>) { . . . }}
{set [expression](<em>val</em>) { . . . }}</pre>

<h3 id="Parameter">Parameter</h3>

<dl>
 <dt><code>prop</code></dt>
 <dd>Der Name der Eigenschaft, die an die gegebene Funktion gebunden wird.</dd>
</dl>

<dl>
 <dt><code>val</code></dt>
 <dd>Ein Alias für die Variable, die den Wert enthält, der der Eigenschaft <code>prop</code> zugewiesen wird.</dd>
 <dt>expression</dt>
 <dd>Beginnend mit ECMAScript 2015, kann auch ein Ausdruck für einen berechneten Eigenschaftsnamen genutzt werden, der an die Funktion gebunden wird.</dd>
</dl>

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

<p>In JavaScript kann ein <em>Setter</em> benutzt werden, um eine Funktion aufzurufen, wenn eine Eigenschaft geändert werden soll. Setter werden oft in Verbindung mit Gettern als Pseudoeigenschaft benutzt. Es ist nicht möglich gleichzeitig einen Setter auf einer Eigenschaft zu haben, die eine tatsächlichen Wert hält.</p>

<p>Das folgende ist zu beachten, wenn mit der <code>set</code> Syntax gearbeitet wird:</p>

<div>
<ul>
 <li>Sie kann ein Bezeichner enthalten, welcher entweder eine Zahl oder ein String ist</li>
 <li>Sie muss exakt einen Parameter haben (siehe <a class="external" href="http://whereswalden.com/2010/08/22/incompatible-es5-change-literal-getter-and-setter-functions-must-now-have-exactly-zero-or-one-arguments/" rel="external nofollow">Incompatible <abbr title="ECMAScript 5th edition">ES5</abbr> change: literal getter and setter functions must now have exactly zero or one arguments</a> für mehr Informationen);</li>
 <li>Sie darf nicht in einem Objektliteral mit einem anderen <code>set</code> oder einen Dateneintrag mit der gleichen Eigenschaft geben. (<code>{ set x(v) { }, set x(v) { } }</code> und <code>{ x: ..., set x(v) { } }</code> sind verboten)</li>
</ul>
</div>

<p>Ein Setter kann mit dem <a href="/de/docs/Web/JavaScript/Reference/Operators/delete" title="en-US/docs/JavaScript/Reference/Operators/Special/delete"><code>delete</code></a> Operator gelöscht werden.</p>

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

<h3 id="Definieren_eines_Setters_in_einem_neuen_Objekt_in_der_Objektinitialisierung">Definieren eines Setters in einem neuen Objekt in der Objektinitialisierung</h3>

<p>Das folgende definiert eine Pseudoeigenschaft <code>current</code> im Objekt <code>language</code>, die bei einer Zuweisung einen Wert in das <code>log</code> Array hinzufügt:</p>

<pre class="brush: js">var language = {
  set current(name) {
    this.log.push(name);
  },
  log: []
}

language.current = 'EN';
console.log(language.log); // ['EN']

language.current = 'FA';
console.log(language.log); // ['EN', 'FA']
</pre>

<p>Zu beachten ist, dass <code>current</code> nicht definiert ist und der Zugriff auf diese <code>undefined</code> als Ergebnis liefert.</p>

<h3 id="Löschen_eines_Setter_mit_dem_delete_Operator">Löschen eines Setter mit dem <code>delete</code> Operator</h3>

<p>Wenn ein Setter gelöscht werden soll, muss man einfach <code><a href="/de/docs/Web/JavaScript/Reference/Operators/delete">delete</a></code> benutzen:</p>

<pre class="brush: js">delete o.current;
</pre>

<h3 id="Definieren_eines_Setters_auf_einem_existierenden_Objekts_mit_defineProperty">Definieren eines Setters auf einem existierenden Objekts mit <code>defineProperty</code></h3>

<p>Um einen Setter später zu einem existierenden Objekt hinzuzufügen, benutzt man {{jsxref("Object.defineProperty()")}}.</p>

<pre class="brush: js">var o = {a: 0};

Object.defineProperty(o, 'b', { set: function(x) { this.a = x / 2; } });

o.b = 10; // Runs the setter, which assigns 10 / 2 (5) to the 'a' property
console.log(o.a) // 5</pre>

<h3 id="Einsatz_eines_berechneten_Eigenschaftsnamen">Einsatz eines berechneten Eigenschaftsnamen</h3>

<pre class="brush: js">var expr = 'foo';

var obj = {
  baz: 'bar',
  set [expr](v) { this.baz = v; }
};

console.log(obj.baz); // "bar"
obj.foo = 'baz';      // run the setter
console.log(obj.baz); // "baz"
</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('ES5.1', '#sec-11.1.5', 'Object Initializer')}}</td>
   <td>{{Spec2('ES5.1')}}</td>
   <td>Initiale Definition.</td>
  </tr>
  <tr>
   <td>{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}}</td>
   <td>{{Spec2('ES6')}}</td>
   <td>Berechnete Eigenschaftsnamen hinzugefügt.</td>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}</td>
   <td>{{Spec2('ESDraft')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

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



<p>{{Compat("javascript.functions.set")}}</p>

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

<ul>
 <li><a href="/de/docs/Web/JavaScript/Reference/Functions/get">Getter</a></li>
 <li>{{jsxref("Operators/delete", "delete")}}</li>
 <li>{{jsxref("Object.defineProperty()")}}</li>
 <li>{{jsxref("Object.defineGetter", "__defineGetter__")}}</li>
 <li>{{jsxref("Object.defineSetter", "__defineSetter__")}}</li>
 <li><a href="/de/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters">Defining Getters and Setters</a> im JavaScript Guide</li>
</ul>