Heim Web-Frontend js-Tutorial Erstellung von JAVASCRIPT-Objekten und Verständnis und Vorstellung von 6 Vererbungsmodi

Erstellung von JAVASCRIPT-Objekten und Verständnis und Vorstellung von 6 Vererbungsmodi

Oct 15, 2016 pm 05:38 PM

In JS gibt es insgesamt sechs Vererbungsmuster, darunter Prototypenkette, geliehener Konstruktor, kombinierte Vererbung, prototypische Vererbung, parasitäre Vererbung und parasitäre kombinierte Vererbung. Um das Verständnis und das Gedächtnis zu erleichtern, habe ich mir einen Prozess vorgestellt und die 6 Modi kurz erklärt.

Es ist eine sehr lange Geschichte, nennen wir sie Nuwa Creates Man.

Erstellen von Objekten

Nuwa hat Menschen (erstellte Objekte) einen nach dem anderen gekniffen, was zu langsam war, also entwarf sie eine Maschine (Funktion), um zu sehen, was sie wollte Erschaffen Sie, sagen Sie ihm, welche Eigenschaften und Funktionen diese Person hat, und die Maschine kann es schaffen. Dies ist das Fabrikmuster (die Verwendung derselben Schnittstelle zum Erstellen von Objekten führt zu einer Menge wiederholtem Code, wodurch eine Funktion (Form) erfunden wird).

Aber es ist auch mühsam, einen Menschen mit einer Maschine zu machen (Erde graben, Schlamm kneten, Augen kneifen, Nase kneifen ...) So entstand die Idee, Nasen und Augen im Voraus zu kneifen Ändern Sie zur Sicherung die Maschine und sagen Sie, welche Art von Augen und Nase die Person hat, die Sie erstellen möchten. Eine solche Maschine kann direkt installiert werden.

Es gibt immer noch Probleme damit, dass jeder, der kneift, laufen kann. Dieser Vorgang ist zu langsam und kann zu Fehlern führen Partei (Funktion Die Methode wird außerhalb des Konstruktors und im globalen Bereich definiert). Der Dritte ist dafür verantwortlich, die Funktion zum Ausführen auf allen Personen zu installieren, die ich kneife, und ich nehme sie und lege sie zur Verwendung auf die Maschine, sodass nicht jedes Mal eine Verarbeitung erforderlich ist. OK, die Leute können laufen, was sehr praktisch ist, aber die gebauten Leute brauchen immer noch N-Funktionen von „Sprung“ und „Gehen“. Dann können wir die Maschine nicht mehr so ​​bauen macht keinen Sinn. Also hat Nuwa (Entwickler) schon früh den Prototypenmodus erstellt ... Mein Wa ist unglaublich.

Jede Funktion im Prototypmodus verfügt über ein Prototypattribut, bei dem es sich um einen Zeiger handelt, der auf das Prototypobjekt zeigt. Das Prototypobjekt enthält Eigenschaften und Methoden, die von allen Instanzen gemeinsam genutzt werden können. Dieses Prototypobjekt verfügt über ein Konstruktorattribut, das einen Zeiger auf die Funktion enthält, in der sich das Prototypattribut befindet.

Es scheint etwas verwirrend, aber aus der Sicht von Nuwa ist es leicht zu verstehen: Die Schöpferin Nuwa hat auch eine Vielzahl von Formen (Prototypenobjekten) erfunden und ist gerade dabei, mit deren Erstellung zu beginnen: 1 Erstellen eine Art Mensch -->Die Form, aus der solche Menschen hergestellt werden, wird verwendet. Schließlich kann alles hergestellt werden, und zwar in welcher Form auch immer. Alle vom Menschen hergestellten Maschinen (Funktionen) haben ihre eigene einzigartige Form (Prototypobjekt), und die Maschine verfügt über eine Beschriftung [Prototyp], die auf die Form verweist. Diese Form verfügt über ein [Konstrukteur]-Attribut, das mit einer Produktionsmarke gekennzeichnet werden kann. zeigt auf diese Maschine und zeigt damit an, dass es sich um eine Maschine handelt, die für die Formenherstellung verwendet wird. Wenn Sie also einen bestimmten Personentyp erschaffen möchten, müssen Sie nur die Form ändern. Dies ist der Vorteil von Prototypobjekten, die bequem und schnell sind.

Der Produktionsprozess ist wie folgt: 1 Erstellen Sie Maschine A: function jqA(){} //Es gibt ein Prototypattribut, das auf die Form (Prototypobjekt) zeigt

2 Erstellen Sie die Form: jqA.prototype={

Konstruktor: jqA, // Äquivalent zur Beschriftung, hergestellt von Maschine A,

Name: 'Lilie',

Haut: 'weiß ',

      run: function(){

     ( Der Schimmel ist für die Entstehung des Namens Lili verantwortlich und die Haut ist weiß, die Art von Menschen, die rennen können.

3 Erstellen Sie eine Person dieses Typs var person1=new jqA();

Erstellen Sie eine Person dieses Typs var person2=new jaA();

person1 und person2 Es gibt ein [[Prototyp]]-Attribut, das bedeutet, dass es von Vorlage A verarbeitet wurde und auf Vorlage A verweist.

Es ist perfekt, aber das Problem tritt erneut auf. Die auf diese Weise erzeugten Personen sind alle gleich . Fünf identische weiße Menschen kommen auf Sie zu, und dann sind da noch fünf kleine, hässliche Menschen mit dem gleichen Aussehen. Während Maschine A also Vorlagen verwendet, kann sie nach den weiblichen Anweisungen auch Menschen mit unterschiedlichen Eigenschaften erstellen, wie zum Beispiel: Dieser hat blaue Augen, dieser ist dicker. . Diese zusätzliche Funktion wird durch den Konstruktor implementiert ---》Verwendung des Konstruktors und des Prototypmusters in Kombination

Der Produktionsprozess ist wie folgt: Vorlage, sodass die Vorlage direkt in der Maschine installiert wird: Initialisieren Sie das Prototypobjekt in der Konstruktor ---" Der dynamische Prototypenmodus ist bequemer

  Der Produktionsprozess ist wie folgt:

und Frage? Ok, stellen Sie den parasitären Konstruktormodus bereit: Fügen Sie der Maschine eine interne Maschine hinzu, diese interne Maschine ist für die Produktion verantwortlich und stellt die produzierten Personen der externen Maschine zur Verfügung, und die externe Maschine stellt diese Personen der Außenseite zur Verfügung. (Normalerweise nicht verwendet...)
        //组合使用构造函数模式和原型模式
            function  Person(name,skill,country) {
                this.name=name;
                this.age=skill;
                this.country=country;
                this.member=["刘封","刘婵"];
            } //机器可以听命令
 
            Person.prototype={
                constructor:Person,
                sayName:function () {
                    alert(this.name);
                }
            }  //还可以用模板
             var person1=new Person('马超','铁骑','蜀国');
             var person2=new Person('刘备','仁德','蜀国');
Nach dem Login kopieren

Vererbung (nach meinem Verständnis—_—)

  问题:女娲要造另一批人B,这批人的模板B造好了,但是想让这批人有之前造过的那批人的特点,怎么办?先让这些人过滤一下先前的模板A,在放到B中造就ok,这样类‘B人'就继承了‘A’类人的特点。如何过滤:父实例=子原型 建B的模板,造一个a出来,这个a肯定要过滤A模板,所以让B的模板等于a就ok,问题解决。 

 //父函数,机器A,A类人。它的实例a中有[[Prototype]]属性和自定义的property属性

    function SuperType(){
    this.property=true;
    }
    //在SuperType原型对象(模具A)中添加getSuperValue方法
    SuperType.prototype.getSuperValue=function(){
    return this.property 
      }
 
    //子函数,机器B,B类人。构造函数SubType,它的实例中有[[Prototype]]属性和自定义的subproperty属性
    function SubType(){
    this.subproperty=false;
      }
    //继承了SuperType (原型链)
    SubType.prototype=new SuperType();  //机器B=a
    //在SubType原型对象(模具B)中添加getSubValue方法
    SubType.prototype.getSubValue=function(){
return tis.subproperty;
    };  
    var insatance=new SubType();
    alert(insatance.getSuperValue()); //true
Nach dem Login kopieren

问题:引用类型值会改变,因为实例共享属性,和原型模式中的问题相同

解决方案:经典继承 (借用构造函数):其实就是把模具A设计到机器B中,但是它已经不是模板了,机器B会给生产的b们添加这些A中的属性和方法,但是可以人为控制,女娲又命令机器B根据传递不同的命令生产不同的b。

  

在子类构造函数的内部调用超类构造函数

     相当于把父类的属性实例化到子类中?Java中的super() 存在疑问

 

   function SuperType(){
  this.colors=['red','blue','green'];
    }
    function SubType(){
    //继承了SuperTYpe
    SuperType.call(this);
     }
    var insatance1=new SubType();
    insatance1.colors.push('black');
    alert(insatance1.colors);// 'red,blue,green,black'
 
    var insatance2=new SubType();
    alert(insatance2.colors);//'red,blue,green'
Nach dem Login kopieren

1传递参数:

      借用构造参数可以在子类型构造参数中向超类型构造参数传递参数

 

     function SuperType(name){
   this.name=name;
      }
      function SubType(){
    //继承了SuperTYpe,同时还传递了参数
    SuperType.call(this,'赵云');
 
    //实例属性
    this.age=29;
    }
Nach dem Login kopieren

    var insatance=new SubType();

    alert(insatance.name); //赵云

    alert(insatance.age); //29

为了确保SuperType构造函数不会重写子类型的属性,可以在调用超类型构造函数之后,再添加应该在子类型中定义的属性。

问题:浪费劳动力,在机器中创建A具有的功能和属性,那么A模板就没用了,相当于回到工厂模式,都有打火机了,还要钻木取火吗....

  解决方案:组合继承

    在公司加班没事做,现在赶着下班,故事编不下去了,后面的继承模式搬之前的记录吧..   

  原型链和构造函数技术组合到一起,使用原型链实现对原型属性和方法的继承,借用构造函数来实现对实例属性的继承。这样通过在原型上定义方法实现了函数的复用,有能够保证每个实例都有它自己的属性

    原型继承:方法可以,实例属性无法继承; 借用构造函数:实例属性可以,方法不行。 一起用,完美。

     

  function SuperType(name){
   this.name=name;
   thi.colors=['red','blue','green'];
     }
    SuperType.prototype.sayName=function(){
   alert(this.name);
    };
 
    function SubType(name,age){
  //继承属性
  SuperType.call(this,name);
  this.age=age;
    }
     //继承方法
   SubType.prototype=new SuperType();
 
   SubType.prototype.sayAge=function(){
    alert(this.age);
   }
 
  var instance1=new SubType('zhaoyun',29);
  instance1.colors.push('black');
  alert(instance1.colors); //'red,blue,green,black'
  instance1.sayName();//zhaoyun
  instance1.sayAge();//29
 
  var insatance2=new SubType('诸葛瑾',25);
  alert(instance2.colrs);'red,blue,green'
  instance22.sayName();//诸葛瑾
  instance2.sayAge();//25
Nach dem Login kopieren


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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie erstelle ich meine eigenen JavaScript -Bibliotheken? Wie erstelle ich meine eigenen JavaScript -Bibliotheken? Mar 18, 2025 pm 03:12 PM

In Artikel werden JavaScript -Bibliotheken erstellt, veröffentlicht und aufrechterhalten und konzentriert sich auf Planung, Entwicklung, Testen, Dokumentation und Werbestrategien.

Wie optimiere ich den JavaScript -Code für die Leistung im Browser? Wie optimiere ich den JavaScript -Code für die Leistung im Browser? Mar 18, 2025 pm 03:14 PM

In dem Artikel werden Strategien zur Optimierung der JavaScript -Leistung in Browsern erörtert, wobei der Schwerpunkt auf die Reduzierung der Ausführungszeit und die Minimierung der Auswirkungen auf die Lastgeschwindigkeit der Seite wird.

Was soll ich tun, wenn ich auf den Codendruck auf Kleidungsstücke für Front-End-Thermalpapier-Quittungen stoße? Was soll ich tun, wenn ich auf den Codendruck auf Kleidungsstücke für Front-End-Thermalpapier-Quittungen stoße? Apr 04, 2025 pm 02:42 PM

Häufig gestellte Fragen und Lösungen für das Ticket-Ticket-Ticket-Ticket in Front-End im Front-End-Entwicklungsdruck ist der Ticketdruck eine häufige Voraussetzung. Viele Entwickler implementieren jedoch ...

Wie debugge ich den JavaScript -Code effektiv mithilfe von Browser -Entwickler -Tools? Wie debugge ich den JavaScript -Code effektiv mithilfe von Browser -Entwickler -Tools? Mar 18, 2025 pm 03:16 PM

In dem Artikel werden effektives JavaScript -Debuggen mithilfe von Browser -Entwickler -Tools, der Schwerpunkt auf dem Festlegen von Haltepunkten, der Konsole und der Analyse der Leistung erörtert.

Wer bekommt mehr Python oder JavaScript bezahlt? Wer bekommt mehr Python oder JavaScript bezahlt? Apr 04, 2025 am 12:09 AM

Es gibt kein absolutes Gehalt für Python- und JavaScript -Entwickler, je nach Fähigkeiten und Branchenbedürfnissen. 1. Python kann mehr in Datenwissenschaft und maschinellem Lernen bezahlt werden. 2. JavaScript hat eine große Nachfrage in der Entwicklung von Front-End- und Full-Stack-Entwicklung, und sein Gehalt ist auch beträchtlich. 3. Einflussfaktoren umfassen Erfahrung, geografische Standort, Unternehmensgröße und spezifische Fähigkeiten.

Wie verwende ich Quellkarten zum Debuggen, um den JavaScript -Code zu debuggen? Wie verwende ich Quellkarten zum Debuggen, um den JavaScript -Code zu debuggen? Mar 18, 2025 pm 03:17 PM

In dem Artikel wird erläutert, wie Quellkarten zum Debuggen von JavaScript verwendet werden, indem er auf den ursprünglichen Code zurückgegeben wird. Es wird erläutert, dass Quellenkarten aktiviert, Breakpoints eingestellt und Tools wie Chrome Devtools und WebPack verwendet werden.

Erste Schritte mit Chart.js: Kuchen-, Donut- und Bubble -Diagramme Erste Schritte mit Chart.js: Kuchen-, Donut- und Bubble -Diagramme Mar 15, 2025 am 09:19 AM

In diesem Tutorial wird erläutert, wie man mit Diagramm.js Kuchen-, Ring- und Bubble -Diagramme erstellt. Zuvor haben wir vier Chart -Arten von Charts gelernt. Erstellen Sie Kuchen- und Ringdiagramme Kreisdiagramme und Ringdiagramme sind ideal, um die Proportionen eines Ganzen anzuzeigen, das in verschiedene Teile unterteilt ist. Zum Beispiel kann ein Kreisdiagramm verwendet werden, um den Prozentsatz der männlichen Löwen, weiblichen Löwen und jungen Löwen in einer Safari oder den Prozentsatz der Stimmen zu zeigen, die verschiedene Kandidaten bei der Wahl erhalten. Kreisdiagramme eignen sich nur zum Vergleich einzelner Parameter oder Datensätze. Es ist zu beachten, dass das Kreisdiagramm keine Entitäten ohne Wert zeichnen kann, da der Winkel des Lüfters im Kreisdiagramm von der numerischen Größe des Datenpunkts abhängt. Dies bedeutet jede Entität ohne Anteil

Der Unterschied in der Konsole.log -Ausgabeergebnis: Warum unterscheiden sich die beiden Anrufe? Der Unterschied in der Konsole.log -Ausgabeergebnis: Warum unterscheiden sich die beiden Anrufe? Apr 04, 2025 pm 05:12 PM

Eingehende Diskussion der Ursachen des Unterschieds in der Konsole.log-Ausgabe. In diesem Artikel wird die Unterschiede in den Ausgabeergebnissen der Konsolenfunktion in einem Code analysiert und die Gründe dafür erläutert. � ...

See all articles