JavaScript-Accessoren


Inhaltsverzeichnis

    Inhaltsverzeichnis anzeigen


JavaScript-Accessoren (Getter und Setter)

ECMAScript 5 (ES5 2009) führte Getter und Setter ein.

Mit Gettern und Settern können Sie Objektzugriffsfunktionen (berechnet) definieren Eigenschaften).


JavaScript-Getter (das get-Schlüsselwort)

In diesem Beispiel wird eine lang-Eigenschaft zum Abrufen verwendet der Wert der Eigenschaft Sprache.

Beispiel

// Create an object:
const person = {
  firstName: "John",
  lastName: "Doe",
  language: "en",
  get lang() {
    return this.language;
    }
};

// Display data from the object using a getter:
document.getElementById("demo").innerHTML = person.lang;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Getters and Setters</h2>

<p>Getters and setters allow you to get and set object properties via methods.</p>

<p>This example uses a lang property to get the value of the language property:</p>

<p id="demo"></p>

<script>
// Create an object:
const person = {
  firstName: "John",
  lastName: "Doe",
  language: "en",
  get lang() {
    return this.language;
  }
};

// Display data from the object using a getter:
document.getElementById("demo").innerHTML = person.lang;
</script>

</body>
</html>

JavaScript-Setter (Das set-Schlüsselwort)

In diesem Beispiel wird eine lang-Eigenschaft zum Set verwendet der Wert der Eigenschaft Sprache.

Beispiel

const person = {
  firstName: "John",
  lastName: "Doe",
  language: "",
    set lang(lang) {
    this.language = lang;
    }
};

// Set an object 
property using a setter:
person.lang = "en";

// Display data from the object:
document.getElementById("demo").innerHTML = person.language;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Getters and Setters</h2>

<p>Getters and setters allow you to get and set properties via methods.</p>

<p>This example uses a lang property to set the value of the language property.</p>

<p id="demo"></p>

<script>
// Create an object:
const person = {
  firstName: "John",
  lastName: "Doe",
  language: "NO",
  set lang(value) {
    this.language = value;
  }
};

// Set a property using set:
person.lang = "en";

// Display data from the object:
document.getElementById("demo").innerHTML = person.language;
</script>

</body>
</html>


JavaScript-Funktion oder Getter?

Was sind die Unterschiede zwischen diesen beiden Beispielen?

Beispiel 1

const person = {
  firstName: "John",
  lastName: "Doe",
  fullName: function() {
    return this.firstName + " " + 
this.lastName;
  }
};
// Display data from the object using a method:
  document.getElementById("demo").innerHTML = person.fullName();

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Object Methods</h2>

<p>Object data can be accessed using property stored as a function.</p>

<p id="demo"></p>

<script>
// Create an object:
const person = {
  firstName: "John",
  lastName: "Doe",
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
};

// Display data from the object using a method:
document.getElementById("demo").innerHTML = person.fullName();
</script>

</body>
</html>

Beispiel 2

const person = {
  firstName: "John",
  lastName: "Doe",
  get fullName() {
    return this.firstName + " " + 
this.lastName;
  }
};
// Display data from the object using a getter:
  document.getElementById("demo").innerHTML = person.fullName;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Object Methods</h2>

<p>Object data can be accessed using a getter.</p>

<p id="demo"></p>

<script>
// Create an object:
const person = {
  firstName: "John",
  lastName: "Doe",
  get fullName() {
    return this.firstName + " " + this.lastName;
  }
};
// Display data from the object using a getter:
document.getElementById("demo").innerHTML = person.fullName;
</script>

</body>
</html>

Beispiel 1 Zugriff auf fullName als Funktion: person.fullName().

Beispiel 2: Zugriff auf fullName als Eigenschaft: person.fullName.

Das zweite Beispiel bietet eine einfachere Syntax.


Datenqualität

JavaScript kann bei der Verwendung von Gettern und Settern eine bessere Datenqualität gewährleisten.

In diesem Beispiel wird durch die Verwendung der Eigenschaft lang der Wert zurückgegeben der Eigenschaft Sprache in Großbuchstaben:

Beispiel

// Create an object:
const person = {
  firstName: "John",
  lastName: "Doe",
  language: "en",
  get lang() {
    return this.language.toUpperCase();
    }
};

// Display data from the object using a getter:
document.getElementById("demo").innerHTML = person.lang;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Getters and Setters</h2>

<p>Getters and setters allow you to get and set properties via methods.</p>

<p id="demo"></p>

<script>
// Create an object:
const person = {
  firstName: "John",
  lastName: "Doe",
  language: "en",
  get lang() {
    return this.language.toUpperCase();
  }
};
// Display data from the object using a getter:
document.getElementById("demo").innerHTML = person.lang;
</script>

</body>
</html>

Mit der Eigenschaft lang wird in diesem Beispiel ein Großbuchstabe gespeichert Wert in der Eigenschaft Sprache:

Beispiel

const person = {
  firstName: "John",
  lastName: "Doe",
  language: "",
  set lang(lang) {
      this.language = lang.toUpperCase();
    }
};

// Set an object 
property using a setter:
person.lang = "en";

// Display data from the object:
document.getElementById("demo").innerHTML = person.language;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Getters and Setters</h2>

<p>Getters and setters allow you to get and set properties via methods.</p>

<p id="demo"></p>

<script>
// Create an object:
const person = {
  firstName: "John",
  lastName: "Doe",
  language: "",
  set lang(lang) {
    this.language = lang.toUpperCase();
  }
};

// Set a property using set:
person.lang = "en";

// Display data from the object:
document.getElementById("demo").innerHTML = person.language;
</script>

</body>
</html>

Warum Getter und Setter verwenden?

  • Es bietet eine einfachere Syntax

  • Es ermöglicht eine gleiche Syntax für Eigenschaften und Methoden

  • Es kann eine bessere Datenqualität gewährleisten

  • Es ist nützlich, um Dinge hinter den Kulissen zu erledigen


Object.defineProperty()

Die Methode Object.defineProperty() kann auch zum Hinzufügen von Gettern und verwendet werden Setzer:

Ein Gegenbeispiel

// Define object
const obj = {counter : 0};

// Define setters and getters
Object.defineProperty(obj, "reset", {
  get : function () {this.counter = 0;}
});
Object.defineProperty(obj, "increment", {
  get : function () {this.counter++;}
});
Object.defineProperty(obj, "decrement", {
  get : function () {this.counter--;}
});
Object.defineProperty(obj, "add", {
  set : function (value) {this.counter += value;}
});
Object.defineProperty(obj, "subtract", {
  set : function (value) {this.counter -= value;}
});

// Play with the counter:
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Getters and Setters</h2>

<p>Perfect for creating counters:</p>

<p id="demo"></p>

<script>
// Define an object
const obj = {counter : 0};

// Define Setters and Getters
Object.defineProperty(obj, "reset", {
  get : function () {this.counter = 0;}
});
Object.defineProperty(obj, "increment", {
  get : function () {this.counter++;}
});
Object.defineProperty(obj, "decrement", {
  get : function () {this.counter--;}
});
Object.defineProperty(obj, "add", {
  set : function (value) {this.counter += value;}
});
Object.defineProperty(obj, "subtract", {
  set : function (value) {this.counter -= value;}
});

// Play with counter:
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;
document.getElementById("demo").innerHTML = obj.counter;
</script>

</body>
</html>