Heim > Web-Frontend > js-Tutorial > Ausführliche Erläuterung von Beispielen für die Vererbung von Javascript-Nicht-Konstruktoren

Ausführliche Erläuterung von Beispielen für die Vererbung von Javascript-Nicht-Konstruktoren

PHP中文网
Freigeben: 2017-06-28 11:53:20
Original
1062 Leute haben es durchsucht

Dieser Artikel stellt Ihnen die Implementierung von „Vererbung“ ohne Verwendung von Konstruktoren vor. Es ist sehr einfach, wenn Sie es sorgfältig verstehen.

1. Was ist die Vererbung von „Nicht-Konstrukteur“?

Zum Beispiel gibt es ein Objekt namens „Chinesisch“.

var Chinese = { nation:'中国' };
Nach dem Login kopieren

Es gibt ein weiteres Objekt namens „Doktor“.

 var Doctor ={ career:'医生' }
Nach dem Login kopieren

Wie kann ich „Doctor“ „Chinese“ erben lassen? Mit anderen Worten, wie kann ich ein Objekt von „Chinese Doctor“ generieren?

Hier ist zu beachten, dass es sich bei diesen beiden Objekten um gewöhnliche Objekte und nicht um Konstruktoren handelt und die „Vererbung“ nicht mit der Konstruktormethode implementiert werden kann.

2. Object()-Methode

Douglas Crockford, der Erfinder des JSON-Formats, hat eine object()-Funktion vorgeschlagen, die dies tun kann.


function object(o) {

    function F() {}

    F.prototype = o;

    return new F();

  }
Nach dem Login kopieren

Diese Funktion object() macht eigentlich nur eines, nämlich das Prototypattribut des untergeordneten Objekts auf das übergeordnete Objekt zu verweisen und dadurch zu erstellen Das untergeordnete Objekt ist mit dem übergeordneten Objekt verbunden. Bei Verwendung von

besteht der erste Schritt darin, ein untergeordnetes Objekt basierend auf dem übergeordneten Objekt zu generieren:

var Doctor = object(Chinese);
Nach dem Login kopieren

Anschließend fügen Sie die Attribute des untergeordneten Objekts selbst hinzu:

Doctor.career = '医生';
Nach dem Login kopieren

Zu diesem Zeitpunkt hat das untergeordnete Objekt die Eigenschaften des übergeordneten Objekts geerbt.  

alert(Doctor.nation); //中国
Nach dem Login kopieren

3. Flache Kopie

Neben der Verwendung der „Prototypenkette“ gibt es noch eine andere Denkweise: Kopieren Sie die Die Attribute des übergeordneten Objekts werden alle in das untergeordnete Objekt kopiert, und es kann auch eine Vererbung erreicht werden.

Die folgende Funktion dient zum Kopieren:


  function extendCopy(p) {

    var c = {};

    for (var i in p) {
      c[i] = p[i];
    }

    c.uber = p;

 return c; }
Nach dem Login kopieren

Wenn Sie sie verwenden, schreiben Sie so:  

var Doctor = extendCopy(Chinese);
Doctor.career = '医生';
alert(Doctor.nation); // 中国
Nach dem Login kopieren

Allerdings gibt es bei einer solchen Kopie ein Problem. Das heißt, wenn die Eigenschaften des übergeordneten Objekts denen eines Arrays oder eines anderen Objekts entsprechen, erhält das untergeordnete Objekt tatsächlich nur eine Speicheradresse und keine echte Kopie, sodass die Möglichkeit besteht, dass das übergeordnete Objekt dies getan hat manipuliert.

Bitte sehen Sie, fügen Sie jetzt dem Chinesischen das Attribut „Geburtsort“ hinzu, und sein Wert ist ein Array.  

Chinese.birthPlaces = ['北京','上海','香港'];
Nach dem Login kopieren

Durch die Funktion „extendCopy()“ erbt Doctor Chinesisch.

var Doctor = extendCopy(Chinese);
Nach dem Login kopieren

Dann fügen wir eine Stadt für den „Geburtsort“ des Doktors hinzu:

Doctor.birthPlaces.push('厦门');
Nach dem Login kopieren

Was ist passiert? Auch der „Geburtsort“ der Chinesen wurde geändert!

alert(Doctor.birthPlaces); //北京, 上海, 香港, 厦门
alert(Chinese.birthPlaces); //北京, 上海, 香港, 厦门
Nach dem Login kopieren

extendCopy() kopiert also nur grundlegende Datentypen. Wir nennen diese Kopie „flache Kopie“. Auf diese Weise wurde die Vererbung im frühen jQuery implementiert.

4. Deep Copy

Die sogenannte „Deep Copy“ ist die Fähigkeit, die echte Kopie von Arrays und Objekten zu realisieren. Die Implementierung ist nicht schwierig. Rufen Sie einfach rekursiv „Shallow Copy“ auf.


  function deepCopy(p, c) {

    var c = c || {};

    for (var i in p) {

      if (typeof p[i] === 'object') {

        c[i] = (p[i].constructor === Array) ? [] : {};

        deepCopy(p[i], c[i]);

      } else {

         c[i] = p[i];

      }
}

    return c; }
Nach dem Login kopieren

Schreiben Sie bei der Verwendung folgendermaßen:

var Doctor = deepCopy(Chinese);
Nach dem Login kopieren

Fügen Sie nun dem übergeordneten Objekt ein Attribut mit dem Wert as hinzu ein Array. Ändern Sie dann dieses Attribut für das untergeordnete Objekt:  

Chinese.birthPlaces = ['北京','上海','香港'];
Doctor.birthPlaces.push('厦门');
Nach dem Login kopieren

Zu diesem Zeitpunkt ist das übergeordnete Objekt nicht betroffen.

alert(Doctor.birthPlaces); //北京, 上海, 香港, 厦门
alert(Chinese.birthPlaces); //北京, 上海, 香港
Nach dem Login kopieren

Derzeit verwendet die jQuery-Bibliothek diese Vererbungsmethode.

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung von Beispielen für die Vererbung von Javascript-Nicht-Konstruktoren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage