In JavaScript werden Objekte als "eine Sammlung ungeordneter Attribute definiert, deren Eigenschaften Grundwerte, Objekte oder Funktionen enthalten können". In Laien-Begriffen können wir Objekte als Mengen von Namenswertpaaren verstehen, bei denen Werte Daten oder Funktionen sein können.
Normalerweise gibt es zwei Möglichkeiten, ein benutzerdefiniertes Objekt zu erstellen. Das erste besteht darin, eine Instanz eines Objekts zu erstellen und dann Eigenschaften und Methoden hinzuzufügen, wie beispielsweise:
var person = new Object (); Person.name = "Scott"; Person.age = 24; Person.sayname = function () {alert (Person.Name); }Die zweite Methode ist die Objektliteralmethode. Es wird im Allgemeinen empfohlen, diese Methode zum Erstellen von Objekten zu verwenden, z. B.:
var person = {name: "Scott", Alter: 24, sayName: function () {alert (this.name); }}Attributtyp
In JavaScript sind zwei verschiedene Eigenschaften definiert: Dateneigenschaften und Zubehöreigenschaften. Datenattribute werden im Allgemeinen verwendet, um Datenwerte zu speichern, während Accessor -Attribute im Allgemeinen GET/SET -Vorgänge ausführen und Datenwerte nicht direkt speichern können. In ES5 definieren wir Attribute zur Beschreibung verschiedener Merkmale von Eigenschaften. In JavaScript können wir nicht direkt auf die Funktion zugreifen. Daher haben wir sie in zwei Paar quadratische Klammern wie [[[[[[[[[[[aufzählbare]]] eingefügt.
• Dateneigenschaften
Datenattribute beschreiben hauptsächlich ihr Verhalten:
1. [[Konfigurierbar]]: Standard ist wahr. Gibt an, ob das Attribut gelöscht werden kann, um das Attribut neu zu definieren, ob die Attributmerkmale geändert werden können oder ob das Attribut an das Attribut des Accessors geändert werden kann.
2. [[aufzählbar]]: Standard ist wahr. Gibt an, ob das Attribut über die für die In-In-Schleife zurückgegeben werden kann.
3. [[Beschreibbar]]: Standard ist wahr. Gibt an, ob der Wert des Attributs geändert werden kann.
4. [[Wert]]: Der Standardwert ist undefiniert. Repräsentiert den Datenwert, der das Attribut enthält. Aus dieser Position werden Lese- und Schreibattributwerte ausgeführt.
Für Eigenschaften, die oben direkt auf dem Personobjekt definiert sind, sind ihre [[konfigurierbaren], [[[[[[[schriftlichen]]] Eigenschaften standardmäßig auf True gesetzt, während die Eigenschaften [[Wert]] auf einen bestimmten Wert eingestellt sind. Wenn Sie die Standardeigenschaften einer Eigenschaft ändern möchten, können Sie das von ES5 bereitgestellte Objekt verwenden. Diese Methode empfängt drei Parameter: das Objekt, in dem sich die Eigenschaft befindet, der Name der Eigenschaft und ein Deskriptorobjekt. Ein Deskriptorobjekt kann nur ein oder mehrere der oben genannten vier Merkmale enthalten. Beispiele sind wie folgt:
var person = {name: "Scott"} Object.DefineProperty (Person, "Name", {schriftlich: false;}) console.log (Person.name); // "Scott" Person.name = "Evan"; console.log (Person.name); // "Scott"Setzen Sie die beschreibbare Eigenschaft des Attributs des Objektnamens für das Objekt auf False. Der Wert dieses Attributs ist nicht modifiziert, sodass der Kopiervorgang dieses Attributs direkt ignoriert wird.
var person = {name: "scott"} object.defineProperty (Person, "Name", {konfigurierbar: false;}) console.log (Person.name); // "Scott" Person löschen.name; console.log (Person.name); // "Scott"Es ist ersichtlich, dass, wenn der Eigenschaftswert des Namens Attribut auf False festgelegt wird, dies bedeutet, dass das Attribut nicht aus dem Objekt gelöscht werden kann. Es ist jedoch zu beachten, dass eine Eigenschaft, wenn sie als unkonfigurierbar definiert ist, nicht wieder konfigurierbar umgewandelt werden kann. Zu diesem Zeitpunkt verursacht das Ändern anderer Funktionen als Beschreibung einen Fehler beispielsweise:
var person = {name: "scott"} object.defineProperty (Person, "Name", {konfigurierbar: false;}) Object.DefineProperty (Person, "Name", {konfigurierbar: true; // Ein Fehler wird hier geworfen})Das heißt, nach der Änderung der konfigurierbaren Funktion auf FALSE wird es beim Ändern anderer Funktionen Einschränkungen geben.
• Accessoreigenschaften
Das Accessor -Attribut enthält keine Datenwerte. Es enthält ein Paar Getter- und Setterfunktionen. Wenn das Accessor -Attribut gelesen wird, wird die Getter -Funktion aufgerufen und der gültige Wert zurückgegeben. Wenn das Accessor -Attribut geschrieben wird, wird die Setterfunktion aufgerufen und der neue Wert übergeben, und die Setterfunktion ist für die Verarbeitung der Daten verantwortlich. Diese Eigenschaft hat vier Eigenschaften:
1. [[Konfigurierbar]]: Standard ist wahr. Gibt an, ob das Attribut gelöscht werden kann, um das Attribut neu zu definieren, ob die Attributmerkmale geändert werden können oder ob das Attribut an das Attribut des Accessors geändert werden kann.
2. [[aufzählbar]]: Standard ist wahr. Gibt an, ob das Attribut über die für die In-In-Schleife zurückgegeben werden kann.
3. [[GET]]: Die Funktion, die beim Lesen von Attributen aufgerufen wird, ist nicht definiert;
4. [[Set]]: Die Funktion, die beim Schreiben von Attributen aufgerufen wird, ist nicht definiert.
Accessoreigenschaften können nicht direkt definiert werden, sie müssen über das Objekt definiert werden. DeFineProperty () -Funktion, zum Beispiel:
var person = {_name: "scott", _age: 24, _tel: 86247}; // Das Namensattribut ist nur schreibgeschützt. // Das Altersattribut ist nur Schreibobjekt.DefineProperty (Person, "Alter", {set: function (p) {this._age = p;}}); // Das Tel-Attribut ist nur schreibgeschützt. console.log (Person.name); // "Scott" Person.name = "Evan"; console.log (Person.name); // "Scott", die Änderung des Namensattributs ist ungültig.console.log (Person.age); // undefiniert, die unlesbare Attributperson.age = 25; console.log (Person._age); // 25, die Konsole.log (Person.tel); // "86247", die lesbare Attributperson.tel = "13975"; console.log (Person.tel); // "13975" kann die Änderung vorgenommen werdenDer Unterstrich vor dem Attribut zeigt ein Attribut an, auf das nur über die Objektmethode zugegriffen werden kann. Wenn wir Person.name verwenden, rufen wir die Getter -Funktion des Namensattributs auf. Wenn wir der Person einen Wert zuweisen.
Definieren Sie mehrere Attribute
Tatsächlich bietet ES5 eine Methode, um mehrere Eigenschaften für ein Objekt zu definieren, nämlich Objekt.DefineProperties (). Diese Funktion empfängt zwei Parameter, das Objekt, in dem sich die Eigenschaft befindet, und das Objekt, das aus den Attributen besteht, die geändert werden müssen, und deren Deskriptorobjekte. Ändern Sie beispielsweise das obige Beispiel, um mehrere Eigenschaften gleichzeitig zu definieren, wie folgt:
var person = {_name: "scott", _age: 24, _tel: 86247}; Object.DefineProperties (Person, {Name: {get: function () {return this._name;}}, Alter: {set: function (p) {this._age = p;}}, Tel.: {Get: function () {return this._tel;}, set: function (p) {this.tel = p;}}}}}});Eigenschaften lesen
ES5 liefert die Methode von Object.getownPropertyDescripter (), um den Deskriptor für eine bestimmte Eigenschaft zu erhalten. Diese Methode empfängt zwei Parameter: das Objekt, in dem sich das Attribut befindet, und der Attributname seines zu lesen. Das Ergebnis gibt ein Objekt zurück. Wenn es sich um ein Accessor -Attribut handelt, enthalten die zurückgegebenen Objekte Konfigurierbare, Aufzählbare, Get and Set. Wenn es sich um ein Datenattribut handelt, umfassen die Eigenschaften des zurückgegebenen Objekts Konfigurierbare, Aufzählbare, beschreibbare und Wert. Verwenden Sie für das obige Beispiel Folgendes:
var person = {_name: "scott", _age: 24, _tel: 86247}; Object.DefineProperties (Person, {Name: {get: function () {return this._name;}}, Alter: {set: function (p) {this._age = p;}}, Tel.: {Get: function () {return this._tel;}, set: function (p) {this.tel = p;}}}}}}); var Describer = Object.getownPropertyDescripter (Person, "Tel"); console.log (Beschreibung.Value); // undefined Console.log (Beschreibung.Enumerable); // false console.log (typeof cresptioner.get); //"Funktion"Der obige Code erhält die Telefitation des Personenobjekts. Da es sich um eine Accessor -Eigenschaft handelt, ist ihr Wert undefiniert, aufzählbar falsch, und Get ist ein Zeiger auf die Getter -Funktion.
In dem obigen Artikel werden JavaScript -Datenattribute und Accessor -Attribute kurz erläutert, was ich mit Ihnen geteilt habe. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.