Einführung: JavaScript ist eine objektorientierte Sprache, die die Vererbung durch den Prototypmechanismus und die Kapselung durch „Abschlüsse“ und andere Methoden implementiert. In diesem Artikel werden die besonderen Funktionen von JavaScript-Objekten erläutert: Prototypketten, Referenzen, Reflexion, Eigenschaftsdurchquerung und andere Funktionen.
1. Objekterstellung
JavaScript bietet eine sehr intuitive Möglichkeit, Objekte zu erstellen:
var emptyObject = {};
var person = {
name: 'harttle',
age: 24
};
Entspricht:
var xx = new Object();
xx.name = 'hartle';
2
Auf Attribute kann über zwei Syntaxen zugegriffen werden:
person.age
person['age']
Wenn der Attributname nicht vorhanden ist, sucht JavaScript entlang der Prototypenkette. Die Zuweisung kann eine Eigenschaft aktualisieren oder erstellen, und Eigenschaften können über delete person.age gelöscht werden.
Das Abrufen von Attributen von undefiniert führt zu einem TypeError, der normalerweise durch && gelöst wird:
// person.girl === undefiniert
person.girl.name; // undefiniert
3 . Prototype
Die prototypische Vererbungsmethode von JavaScript ist etwas umständlich. Die Object.create-Methode wird in ES6 bereitgestellt, was die prototypische Vererbung noch einfacher macht.
Die Implementierung sieht ungefähr so aus:
if (typeof Object.create !== 'function') {
Object.create = function (o) {
var F = function () { } ;
F.prototype = o;
return new F();
}
var obj = Object.create(proto);
Wenn die Eigenschaften zugewiesen sind Wenn sie vom Prototyp stammen, erstellt/löscht JavaScript auch die entsprechenden Eigenschaften für das aktuelle Objekt, und die Eigenschaften des Prototyps werden nicht beeinträchtigt.
Die Art und Weise, ein Attribut zu löschen, indem man person.age = undefiniert online übergibt, entspricht tatsächlich dem Erstellen eines Attributs mit dem Wert undefiniert. delete person.age löscht die Eigenschaft tatsächlich, als ob diese Eigenschaft nie deklariert worden wäre.
Zum Beispiel:
var prot = { name: 'harttle' }; // Erstelle p mit prot als Prototyp
var p = Object.create(prot); .name ; .name === 'harttle', das erhaltene Prototypattribut
undefiniert gehört zum Basisdatentyp Undefiniert. Dieser Typ hat nur einen Wert, der undefiniert ist.
4. Objektreferenz
Objekte in JavaScript werden als Referenz übergeben und nicht kopiert:
var a = b = {};
a.name = 'harttle'; .name === 'harttle' // true
Beim Erben über den Prototyp geht der Prototyp auch als Referenz in die Prototypenkette ein und die Prototypeigenschaften werden nicht kopiert:
var prot = {girl: {name : 'alice '}};
var p1 = Object.create(prot);
var p2 = Object.create(prot); girl.name === 'fuck'
Es ist ersichtlich, dass die Prototyp-Beziehung eine dynamische Beziehung ist.
5. Reflexion
Typeof kann zur Laufzeit verwendet werden:
typeof p.age // 'number'
typeof p.name // 'string'
typeof p.toString // 'function', aus Prototyp: Object.prototype
typeof p.wing // 'undefiniert'
Natürlich hat typeof begrenzte Fähigkeiten und kann nur grundlegende Datentypen überprüfen. Um objektorientiertes Design zu unterstützen, benötigen wir einen komplexeren Mechanismus zur Typbeurteilung. Weitere Informationen finden Sie unter Wie überprüfe ich den Typ von JavaScript? Ein Artikel.
6. Attributdurchquerung
Sie können Objektattribute (einschließlich Prototypattribute) durchlaufen für in:
var person = {name: 'harttle', age: 24};
for(var prop in person ){
console.log(p[prop);
}
Um nur die Eigenschaften des aktuellen Objekts zu erhalten, können Sie es über hasOwnProperty beurteilen:
for(var prop persönlich ){
if (person.hasOwnProperty(prop)){
console.log(p[prop); }
}
for in garantiert nicht die Reihenfolge der Attribute Wenn Sie die Reihenfolge garantieren müssen, können Sie stattdessen Array verwenden. Vermeidet außerdem die Beurteilung von Eigenschaften anhand von Prototypen.
7. Vermeiden Sie globale Variablen
Die Abhängigkeit von globalen Variablen ist einer der Designfehler von JavaScript. Es gibt viele Möglichkeiten, die Verwendung globaler Variablen zu vermeiden. Die einfachste davon besteht darin, eine globale Variable für Ihr Projekt zu definieren und nur eine globale Variable zu definieren:
var APP = {}; ;
APP.bar = 'xxx';
Dies erleichtert die Pflege und Änderung des Codes. Schließlich ist APP.foo auf den ersten Blick eine globale Variable.