Methoden Definitionen

Beginnend mit ECMAScript 2015 (ES6) wurde eine kürzere Syntax für Methodendefinitionen in Objekt Initialisierungen eingeführt. Es ist eine Abkürzung für die Zuweisung einer Funktion an einen Methodennamen.

Syntax

var obj = {
  property( parameters… ) {},
  *generator( parameters… ) {},
// also with computed keys:
  [property]( parameters… ) {},
  *[generator]( parameters… ) {},
// compare ES5 getter/setter syntax:
  get property() {},
  set property(value) {}
};

Beschreibung

Die Syntax der Kurzschreibweise ähnelt der in ECMAScript 2015 eingeführten Syntax der getter und setter.

Gegeben sei der folgende Quellcode:

var obj = {
  foo: function() {},
  bar: function() {}
};

Jetzt können Sie das abkürzen zu:

var obj = {
  foo() {},
  bar() {}
};

Hinweis: Die kurze Syntax benutzt benamte Funktionen statt anonymen Funktionen (wie in ...foo: function() {}...). Benamte Funktionen können sich vom Funktionskörper aus aufrufen (für anonyme Funktionen ist das unmöglich, weil sie keinen Bezeichner haben). Für mehr Details, siehe function.

Kurze Generatormethoden

Generatormethoden können mit der kurzen Syntax ebenfalls definiert werden. Zu beachten ist, dass der Stern (*) in der kurzen Syntax nur vor dem Namen der Generatoreigenschaft geschrieben werden kann. * g(){} funktioniert, g *(){} funktioniert nicht.

// Using a named property (pre-ES6)
var obj2 = {
  g: function*() {
    var index = 0;
    while(true)
      yield index++;
  }
};

// The same object using shorthand syntax
var obj2 = { 
  * g() {
    var index = 0;
    while(true)
      yield index++;
  }
};

var it = obj2.g();
console.log(it.next().value); // 0
console.log(it.next().value); // 1

Methodendefinitionen die nicht konstruiert werden können

Alle Methodendefinitionen die keine Konstruktoren sind werden einen TypeError erzeugen,  wenn man versucht sie zu instantieren.

var obj = { 
  method() {},
};
new obj.method; // TypeError: obj.method is not a constructor

var obj = { 
  * g() {} 
};
new obj.g; // TypeError: obj.g is not a constructor (changed in ES2016)

Beispiele

Ein einfacher Testfall

var obj = {
  a : "foo",
  b(){ return this.a; }
};
console.log(obj.b()); // "foo"

Berechnete Eigenschaftsnamen

Die Kurzschreib-Syntax unterstützt auch berechnete Eigenschaftsnamen.

var bar = {
  foo0 : function (){return 0;},
  foo1(){return 1;},
  ["foo" + 2](){return 2;},
};

console.log(bar.foo0()); // 0
console.log(bar.foo1()); // 1
console.log(bar.foo2()); // 2

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Method definitions' in dieser Spezifikation.
Standard Initiale Definition.
ECMAScript 2016 (ECMA-262)
Die Definition von 'Method definitions' in dieser Spezifikation.
Standard Geändert, dass Generatormethoden ebenfalls nicht initialisierbar sind und einen Fehler schmeißen, wenn sie mit new eingesetzt werden.
ECMAScript 2017 Draft (ECMA-262)
Die Definition von 'Method definitions' in dieser Spezifikation.
Entwurf  

Browserkompatibilität

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Method definition shorthand 39 34 (34) Nicht unterstützt 26 Nicht unterstützt
Generator methods are not constructable (ES2016) ? 43 (43) ? ? ?
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Method definition shorthand Nicht unterstützt Nicht unterstützt 34.0 (34) Nicht unterstützt Nicht unterstützt Nicht unterstützt
Generator methods are not constructable (ES2016) ? ? 43.0 (43) ? ? ?

SpiderMonkey spezifische Hinweise

  • Vor SpiderMonkey 38 (Firefox 38 / Thunderbird 38 / SeaMonkey 2.35) waren "get" und "set" nicht valide Namen für Generatormethoden. Das wurde in Bug 1073809 behoben.
  • Vor SpiderMonkey 41 (Firefox 41 / Thunderbird 41 / SeaMonkey 2.38) mussten geschweifte Klammern für Methoden nicht notwendiger weise benutzt werden. Jetzt sind sie vorausgesetzt, um konform zur ES6 Spezifikation zu sein. Es wird ein SyntaxError in dieser und späteren Versionen erzeugt (Bug 1150855).
    var o = {x() 12}; // SyntaxError
  • Die Restriktion, dass Generatormethoden Konstuktoren sind wurde in SpiderMonkey 41 (Firefox 41 / Thunderbird 41 / SeaMonkey 2.38) implementiert. Dazu siehe auch Bug 1059908 und Bug 1166950

See also

Schlagwörter des Dokuments und Mitwirkende

 Mitwirkende an dieser Seite: schlagi123, siggi-heltau
 Zuletzt aktualisiert von: schlagi123,