MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

Property accessors bieten mittels Punktnotation oder Klammernotation Zugriff auf die Eigenschaften eines Objekts.

Syntax

object.property
object['property']

Beschreibung

Man kann sich ein Objekt als ein assoziatives Array (auch bekannt als Map, Dictionary, Hash, lookup table) vorstellen. Die Schlüssel in diesem Array sind die Namen der Eigenschaften des Objekts. Es ist typisch, wenn man von Eigenschaften eines Objekts spricht, zwischen Eigenschaften und Methoden zu unterscheiden. Jedoch, die Eigenschaften/Methoden-Unterscheidung ist nur eine Konvention.Eine Methode ist einfach eine Eigenschaft die aufgerufen werden kann. Zum Beispiel wenn sie als Wert eine Referenz auf die Instanz einer Funktion besitzt.

Es gibt zwei Wege auf Eigenschaften zuzugreifen: Die Punktnotation und die Klammernotation.

Punktnotation

get = object.property;
object.property = set;

In diesem Quelltext muss property ein gültiger Bezeichner, z.B. eine Sequenz von alphanumerischen Zeichen inklusive Unterstrich ("_") und Dollarzeichen ("$") die nicht mit einer Nummer beginnen können. Zum Beispiel, object.$1 ist gültig währenddem object.1 nicht gültig ist.

document.createElement('pre');

Hier wird die Methode namens "createElement" von document abgerufen und aufgerufen.

Wenn man eine Methode für ein numerisches Literal nutzt das keinen Exponenten und keine Kommastelle besitzt, können vor dem Punkt, der vor dem Methodenaufruf steht, Leerschläge belassen werden um die Interpretation des Punktes als Kommastelle zu verhindern.

77 .toExponential();
// or
77
.toExponential();
// or
(77).toExponential();
// or
77..toExponential();
// or
77.0.toExponential();
// because 77. === 77.0, no ambiguity

Klammernotation

get = object[property_name];
object[property_name] = set;

property_name ist eine Zeichenkette. Die Zeichenkette muss kein gültiger Bezeichner sein;  sie kann einen beliebigen Wert annehmen, Bsp ."1foo", "!bar!", oder sogar " "  (Leerschlag).

document['createElement']('pre');

Dies macht genau dasselbe wie das vorherige Beispiel.

Ein Leerschlag vor der Klammernotation ist erlaubt.

document ['createElement']('pre');

Namen von Eigenschaften

Namen von Eigenschaften müssen Zeichenketten sein. Das heisst dass keine Objekte als Schlüssel verwendet werden können die keine Zeichenketten sind. Jedes Objekt das keine Zeichenkette ist, inklusive Zahlen, wird mittels toString Methode in eine Zeichenkette umgewandelt.

var object = {};
object['1'] = 'value';
console.log(object[1]);

Dies gibt "value" aus, da 1 in '1' umgewandelt wird.

var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
object[foo] = 'value';
console.log(object[bar]);

Dies gibt auch "value" aus, da beide foo und bar in dieselbe Zeichenkette umgewandelt werden. In der SpiderMonkey JavaScript Engine wäre diese Zeichenkette "['object Object']".

Method binding

Eine Methode ist nicht an ein Objekt gebunden zu der sie gehört. Auch this ist nicht an eine Methode gebunden, Bsp. this muss nicht unbedingt auf das Objekt verweisen das die Methode enthält. this wird stattdessen vom Funktionsaufruf übergeben. Siehe auch method binding.

Note on eval

JavaScript-Anfänger machen oft den Fehler eval zu nutzen wo die Klammernotation verwendet werden kann. Zum Beispiel sieht man folgende Syntax häufig in vielen Skripten.

x = eval('document.forms.form_name.elements.' + strFormControl + '.value');

eval ist langsam und sollte wenn möglich vermieden werden. Ausserdem würde strFormControl auch einen Bezeichner beinhalten müssen der für Namen und IDs von Formularelementen nicht benötigt wird. Es ist besser die Klammernotation zu verwenden.

x = document.forms['form_name'].elements[strFormControl].value;

Specifications

Specification Status Comment
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Property Accessors' in dieser Spezifikation.
Lebender Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Property Accessors' in dieser Spezifikation.
Standard  
ECMAScript 5.1 (ECMA-262)
Die Definition von 'Property Accessors' in dieser Spezifikation.
Standard  
ECMAScript 1st Edition (ECMA-262)
Die Definition von 'Property Accessors' in dieser Spezifikation.
Standard Initiale Definition. Implementiert in JavaScript 1.0.

Browser compatibility

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Ja) (Ja) (Ja) (Ja) (Ja) (Ja)
Feature Android Chrome for Android Edge Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Ja) (Ja) (Ja) (Ja) (Ja) (Ja) (Ja)

See also

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
 Mitwirkende an dieser Seite: timosperisen
 Zuletzt aktualisiert von: timosperisen,