Heim Web-Frontend js-Tutorial 基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解_javascript技巧

基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解_javascript技巧

May 16, 2016 pm 05:34 PM
构造函数

构造函数、原型实现继承的缺陷

首先来分析构造函数和原型链两种实现继承方式的缺陷:

构造函数(对象冒充)的主要问题是必须使用构造函数方式,且无法继承通过原型定义的方法,这不是最好的选择。不过如果使用原型链,就无法使用带参数的构造函数了。开发者如何选择呢?答案很简单,两者都用。

构造函数+原型混合方式

这种继承方式使用构造函数定义类,并非使用任何原型。创建类的最好方式是用构造函数定义属性,用原型定义方法。这种方式同样适用于继承机制,用对象冒充继承构造函数的属性,用原型链继承 prototype 对象的方法。用这两种方式重写前面的例子,代码如下:

复制代码 代码如下:

function ClassA(sColor) {
    this.color = sColor;
}

ClassA.prototype.sayColor = function () {
    alert(this.color);
};

function ClassB(sColor, sName) {
    ClassA.call(this, sColor);
    this.name = sName;
}

ClassB.prototype = new ClassA();

ClassB.prototype.sayName = function () {
    alert(this.name);
};


在此例子中,继承机制由两行突出显示的蓝色代码实现。在第一行突出显示的代码中,在 ClassB 构造函数中,用对象冒充继承 ClassA 类的 sColor 属性。在第二行突出显示的代码中,用原型链继承 ClassA 类的方法。由于这种混合方式使用了原型链,所以 instanceof 运算符仍能正确运行。

下面的例子测试了这段代码:
复制代码 代码如下:

var objA = new ClassA("blue");
var objB = new ClassB("red", "John");
objA.sayColor();    //输出 "blue"
objB.sayColor();    //输出 "red"
objB.sayName();    //输出 "John"

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ß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)

Konstruktor in Python Konstruktor in Python Sep 02, 2023 pm 04:29 PM

In Python verfügt jede Klasse über einen Konstruktor, bei dem es sich um eine spezielle Methode handelt, die innerhalb der Klasse angegeben wird. Der Konstruktor/Initialisierer wird automatisch aufgerufen, wenn ein neues Objekt für die Klasse erstellt wird. Wenn ein Objekt initialisiert wird, weist der Konstruktor den Datenelementen in der Klasse Werte zu. Es ist nicht erforderlich, den Konstruktor explizit zu definieren. Um jedoch einen Konstruktor zu erstellen, müssen wir die folgenden Regeln befolgen: Eine Klasse darf nur einen Konstruktor haben. Der Konstruktorname muss __init__ sein. Konstruktoren müssen mithilfe von Instanzeigenschaften definiert werden (geben Sie einfach das Schlüsselwort self als erstes Argument an). Es kann kein Wert außer None zurückgegeben werden. Syntax classA():def__init__(self):pass Beispiel Betrachten Sie das folgende Beispiel und

C++-Syntaxfehler: Der außerhalb der Klasse definierte Konstruktor muss mit dem Klassennamen als Qualifikationsmerkmal hinzugefügt werden. Wie sollte er korrigiert werden? C++-Syntaxfehler: Der außerhalb der Klasse definierte Konstruktor muss mit dem Klassennamen als Qualifikationsmerkmal hinzugefügt werden. Wie sollte er korrigiert werden? Aug 22, 2023 pm 02:00 PM

C++ ist eine weit verbreitete objektorientierte Programmiersprache. Wenn Sie den Konstruktor einer Klasse in C++ definieren und die Definition des Konstruktors außerhalb der Klasse platzieren möchten, müssen Sie den Klassennamen als Qualifikationsmerkmal zur Definition hinzufügen Konstruktor. Um anzugeben, zu welcher Klasse dieser Konstruktor gehört. Dies ist eine Grundregel der C++-Syntax. Wenn diese Regel beim Definieren des Konstruktors einer Klasse nicht befolgt wird, erscheint ein Kompilierungsfehler mit der Meldung „Außerhalb der Klasse definierte Konstrukte müssen mit dem Klassennamen qualifiziert werden.“ Wenn Sie also auf einen Kompilierungsfehler dieser Art stoßen, sollten Sie dies tun

Hat die Go-Sprache Konstruktoren? Hat die Go-Sprache Konstruktoren? Jan 10, 2023 pm 02:15 PM

Die Go-Sprache hat keine Konstruktoren. Die Go-Sprache verfügt als strukturierte Sprache nicht über Konstruktoren in objektorientierten Sprachen. Ähnliche Effekte von Konstruktoren in objektorientierten Sprachen können jedoch auf bestimmte Weise erzielt werden, nämlich durch die Verwendung des Prozesses der Strukturinitialisierung zur Simulation Implementierung von Konstruktoren.

Was ist ein Konstruktor? Detaillierte Erklärung der Konstruktoren in JavaScript Was ist ein Konstruktor? Detaillierte Erklärung der Konstruktoren in JavaScript Aug 04, 2022 pm 03:22 PM

Als Grundlage für Prototypen und Prototypenketten kann uns das erste Verständnis des Konstruktors und seines Ausführungsprozesses besser dabei helfen, das Wissen über Prototypen und Prototypenketten zu erlernen. In diesem Artikel erfahren Sie mehr über den Konstruktor in JavaScript und stellen vor, wie Sie den Konstruktor zum Erstellen eines JS-Objekts verwenden. Ich hoffe, er wird Ihnen hilfreich sein!

C++-Fehler: Der Konstruktor muss im öffentlichen Bereich deklariert werden, wie gehe ich damit um? C++-Fehler: Der Konstruktor muss im öffentlichen Bereich deklariert werden, wie gehe ich damit um? Aug 21, 2023 pm 08:26 PM

In der C++-Programmierung ist der Konstruktor eine wichtige Funktion, die zum Initialisieren der Mitgliedsvariablen einer Klasse verwendet wird. Es wird automatisch aufgerufen, wenn ein Objekt erstellt wird, um eine ordnungsgemäße Initialisierung des Objekts sicherzustellen. Der Konstruktor muss in der Klasse deklariert werden, aber manchmal wird die Fehlermeldung „Der Konstruktor muss im öffentlichen Bereich deklariert werden“ angezeigt. Dieser Fehler wird normalerweise durch falsche Zugriffsmodifikatoren im Konstruktor verursacht. In C++ verfügen Klassenmitgliedsvariablen und Mitgliedsfunktionen über einen Zugriffsmodifikator, einschließlich public, private und protected.

C++-Syntaxfehler: Ein Konstruktor mit nur einem einzigen Parameter muss explizit deklariert werden. C++-Syntaxfehler: Ein Konstruktor mit nur einem einzigen Parameter muss explizit deklariert werden. Aug 22, 2023 am 09:01 AM

Bei der C++-Programmierung kann die folgende Fehlermeldung auftreten: Konstruktoren mit nur einem Parameter müssen explizit deklariert werden. Diese Fehlermeldung kann Anfänger verwirren. Schauen wir uns als Nächstes an, was explizit in C++ ist, warum diese Fehlermeldung angezeigt wird und wie dieses Problem gelöst werden kann. Die Rolle von „Explicit“ in C++: Wenn wir einen Konstruktor definieren, der nur einen Parameter empfängt, müssen wir das Schlüsselwort „Explici“ verwenden

C++-Syntaxfehler: Dieselbe Konstruktorsignatur kommt mehrmals vor, wie kann man ihn lösen? C++-Syntaxfehler: Dieselbe Konstruktorsignatur kommt mehrmals vor, wie kann man ihn lösen? Aug 22, 2023 pm 04:49 PM

C++ ist eine leistungsstarke Programmiersprache, bei der Verwendung treten jedoch zwangsläufig verschiedene Probleme auf. Unter diesen ist das mehrfache Vorkommen derselben Konstruktorsignatur ein häufiger Syntaxfehler. In diesem Artikel werden die Ursachen und Lösungen für diesen Fehler erläutert. 1. Fehlerursache In C++ wird der Konstruktor verwendet, um die Datenelemente des Objekts beim Erstellen des Objekts zu initialisieren. Wenn jedoch dieselbe Konstruktorsignatur in derselben Klasse definiert ist (d. h. die Parametertypen und die Reihenfolge sind gleich), kann der Compiler nicht bestimmen, welcher Konstruktor aufgerufen werden soll, was zu einem Kompilierungsfehler führt. Zum Beispiel,

Lassen Sie uns darüber sprechen, wie Sie die Funktion Object() verwenden, um Objekte in JavaScript zu erstellen Lassen Sie uns darüber sprechen, wie Sie die Funktion Object() verwenden, um Objekte in JavaScript zu erstellen Aug 04, 2022 pm 04:32 PM

Wie erstelle ich Objekte mit der Funktion Object()? Der folgende Artikel stellt Ihnen die Methode zum Erstellen von Objekten mit dem Object()-Konstruktor vor (mit drei weiteren Methoden zum Erstellen von Objekten).

See all articles