Heim Web-Frontend js-Tutorial 基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解_基础知识

基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解_基础知识

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

继承的方式

ECMAScript 实现继承的方式不止一种。这是因为 JavaScript 中的继承机制并不是明确规定的,而是通过模仿实现的。这意味着所有的继承细节并非完全由解释程序处理。作为开发者,你有权决定最适用的继承方式。最原始的继承实现方式就是对象冒充,下面着重介绍该方法。

对象冒充

对象冒充实现继承的核心其实依赖于在函数环境中使用 this 关键字。其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。因为构造函数只是一个函数,所以可使 ClassA 构造函数成为 ClassB 的方法,然后调用它。ClassB 就会收到 ClassA 的构造函数中定义的属性和方法。例如,用下面的方式定义 ClassA 和 ClassB:

复制代码 代码如下:

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

function ClassB(sColor) {
}


关键字 this 引用的是构造函数当前创建的对象。不过在这个方法中,this 指向的所属的对象。这个原理是把 ClassA 作为常规函数来建立继承机制,而不是作为构造函数。如下使用构造函数 ClassB 可以实现继承机制:
复制代码 代码如下:

function ClassB(sColor) {
    this.newMethod = ClassA;
    this.newMethod(sColor);
    delete this.newMethod;
}

在这段代码中,为 ClassA 赋予了方法 newMethod(请记住,函数名只是指向它的指针)。然后调用该方法,传递给它的是 ClassB 构造函数的参数 sColor。最后一行代码删除了对 ClassA 的引用,这样以后就不能再调用它。

所有新属性和新方法都必须在删除了新方法的代码行后定义。否则,可能会覆盖超类的相关属性和方法:

复制代码 代码如下:

function ClassB(sColor, sName) {
    this.newMethod = ClassA;
    this.newMethod(sColor);
    delete this.newMethod;

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


为证明前面的代码有效,可以运行下面的例子:
复制代码 代码如下:

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

对象冒充可以实现多重继承

有趣的是,对象冒充可以支持多重继承。例如,如果存在两个类 ClassX 和 ClassY,ClassZ 想继承这两个类,可以使用下面的代码:
复制代码 代码如下:

function ClassZ() {
    this.newMethod = ClassX;
    this.newMethod();
    delete this.newMethod;

    this.newMethod = ClassY;
    this.newMethod();
    delete this.newMethod;
}


这里存在一个弊端,如果存在两个类 ClassX 和 ClassY 具有同名的属性或方法,ClassY 具有高优先级。因为它从后面的类继承。除这点小问题之外,用对象冒充实现多重继承机制轻而易举。

由于这种继承方法的流行,ECMAScript 的第三版为 Function 对象加入了两个方法,即 call() 和 apply()。后来很多衍生出来的实现继承的方法其实也是基于call() 和 apply()来实现的。

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)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
2 Wochen 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)

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

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

Kann es in es6 nur einen Konstruktor geben? Kann es in es6 nur einen Konstruktor geben? Oct 18, 2022 pm 03:04 PM

Ja, jede Klasse kann nur einen Konstruktor haben. Wenn sie mehrere Konstruktoren enthält, wird eine Ausnahme ausgelöst. Bei der Verwendung des Konstruktors sind zwei Punkte zu beachten: 1. Der Konstruktor wird zum Erstellen eines bestimmten Objekttyps verwendet , und sein erster Buchstabe muss groß geschrieben werden ;2 Der Konstruktor macht nur Sinn, wenn er zusammen mit new verwendet wird.

See all articles