JavaScript 原型继承之构造函数继承_javascript技巧
上回说到《JavaScript 原型继承之基础机制》,这一篇将具体说说构造函数的继承。
从一个简单的示例开始,创建描述人类的 People 构造函数:
function People(){
this.race = '愚蠢的人类';
}
然后,创建描述黄种人的 Yellow 构造函数:
function Yellow(name, skin){
this.name = name;
this.skin = skin;
}
要使得黄种人 Yellow 能继承人类 People 对象,在 JavaScript 中可以通过多种方式模拟实现。
1、对象冒充(Object Masquerading)
对象冒充,简单地说就是把一个定义抽象类的构造函数当作常规函数使用,实现伪继承:
function Yellow(name, skin) {
this._extend = People;
this._extend();
delete this._extend; //删除对 People 的引用
this.name = name;
this.skin = skin;
}
//实例化 yellow1
var yellow1 = new Yellow('小明', '黄皮肤');
console.log(yellow1.name); //小明
console.log(yellow1.race); //愚蠢的人类
在这段代码中,为 Yellow 添加私有方法 _extend,由于函数本身只是以引用的形式存在,执行时会自动调用 People方法,并传入 Yellow 构造函数的 name 参数。而 Yellow 对象的自身属性和方法,必须在上述过程结束,清空对外部方法的引用后再进行定义。
注:通过对象冒充可以实现多重继承
2、call / apply 方法
通过 call / apply 方法实现继承可能更为简单,不需要任何繁琐的操作:
function Yellow(name, skin) {
People.apply(this, arguments);
this.name = name;
this.skin = skin;
}
//实例化 yellow2
var yellow2 = new Yellow('大卫', '黑皮肤')
console.log(yellow2.name); //大卫
console.log(yellow2.race); //愚蠢的人类
这里为 apply 传入 arguments 数组,也可以使用 new Array 或字面量数组。
3、原型链(Prototype Chaining)
第一种原型继承方法是把对象的原型指向父类的某个实例:
Yellow.prototype = new People();
Yellow.prototype.constructor = Yellow; //初始的 prototype 被完全清空,所以最好将 constructor 重置
var yellow3 = new Yellow('小王', '黄皮肤');
console.log(yellow3.race); //愚蠢的人类
以上代码可以这样反向理解,yellow3 实例本身找不到 race 属性,而它原型上的 race 属性又恰好是 People 对象的实例的 race 属性。
如果对于 People 对象来说,其属性写入了原型中,则无需实例化,只需将 Yellow 的 prototype 属性指向 People的 prototype 属性:
function People(){};
People.prototype.race = '愚蠢的人类';
Yellow.prototype = People.prototype;
Yellow.prototype.constructor = Yellow;
这样做不进行实例化操作,只是指针的改变,非常环保。但由于引用类型的关系,Yellow 和 People 指向了同一个原型对象,也就是说对 Yellow.prototype.constructor 的修改实际上破坏了 People 的原型对象。
既然如此,可以借助一个空的中继对象,绕过父类的原型:
var F = function(){};
F.prototype = People.prototype;
Yellow.prototype = new F();
Yellow.prototype.constructor = Yellow;

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Verwenden Sie bei der Funktionsvererbung „Basisklassenzeiger“ und „abgeleitete Klassenzeiger“, um den Vererbungsmechanismus zu verstehen: Wenn der Basisklassenzeiger auf das abgeleitete Klassenobjekt zeigt, wird eine Aufwärtstransformation durchgeführt und nur auf die Mitglieder der Basisklasse zugegriffen. Wenn ein abgeleiteter Klassenzeiger auf ein Basisklassenobjekt zeigt, wird eine Abwärtsumwandlung durchgeführt (unsicher) und muss mit Vorsicht verwendet werden.

Beheben von PHP-Fehlern: Probleme bei der Vererbung übergeordneter Klassen In PHP ist die Vererbung ein wichtiges Merkmal der objektorientierten Programmierung. Durch Vererbung können wir vorhandenen Code wiederverwenden und ihn erweitern und verbessern, ohne den ursprünglichen Code zu ändern. Obwohl Vererbung in der Entwicklung weit verbreitet ist, können beim Erben von einer übergeordneten Klasse manchmal Fehler auftreten. Dieser Artikel konzentriert sich auf die Lösung häufiger Probleme, die beim Erben von einer übergeordneten Klasse auftreten, und stellt entsprechende Codebeispiele bereit. Frage 1: Die übergeordnete Klasse wird beim Erben der übergeordneten Klasse nicht gefunden, wenn dies nicht der Fall ist

Tipps zum Debuggen von Vererbungsfehlern: Stellen Sie sicher, dass die Vererbungsbeziehungen korrekt sind. Verwenden Sie den Debugger, um den Code schrittweise durchzugehen und Variablenwerte zu untersuchen. Stellen Sie sicher, dass Sie den virtuellen Modifikator richtig verwenden. Untersuchen Sie das Problem der Vererbungsdiamanten, das durch versteckte Vererbung verursacht wird. Suchen Sie nach nicht implementierten rein virtuellen Funktionen in abstrakten Klassen.

Vererbung ist ein Konzept, das es uns ermöglicht, von einer anderen Klasse auf die Eigenschaften und das Verhalten einer Klasse zuzugreifen. Die Klasse, die Methoden und Mitgliedsvariablen erbt, wird als Superklasse oder übergeordnete Klasse bezeichnet, und die Klasse, die diese Methoden und Mitgliedsvariablen erbt, wird als Unterklasse oder Unterklasse bezeichnet. In Java verwenden wir das Schlüsselwort „extends“, um eine Klasse zu erben. In diesem Artikel besprechen wir ein Java-Programm zur Berechnung von Zinsen für Fest- und Festgelder mittels Erbschaft. Erstellen Sie zunächst diese vier Java-Dateien – Acnt.java – in Ihrer lokalen Computer-IDE. Diese Datei enthält eine abstrakte Klasse „Acnt“, die zum Speichern von Kontodetails wie Zinssatz und Betrag verwendet wird. Es wird auch eine abstrakte Methode „calcIntrst“ mit dem Parameter „amnt“ zur Berechnung geben

Detaillierte Erläuterung der C++-Funktionsvererbung: Beherrschen Sie die Beziehung zwischen „is-a“ und „has-a“ Was ist Funktionsvererbung? Funktionsvererbung ist eine Technik in C++, die in einer abgeleiteten Klasse definierte Methoden mit in einer Basisklasse definierten Methoden verknüpft. Es ermöglicht abgeleiteten Klassen, auf Methoden der Basisklasse zuzugreifen und diese zu überschreiben, wodurch die Funktionalität der Basisklasse erweitert wird. „Ist-ein“- und „Hat-ein“-Beziehungen Bei der Funktionsvererbung bedeutet die „Ist-ein“-Beziehung, dass die abgeleitete Klasse ein Untertyp der Basisklasse ist, d. h. die abgeleitete Klasse „erbt“ die Merkmale und das Verhalten von die Basisklasse. Die „has-a“-Beziehung bedeutet, dass die abgeleitete Klasse einen Verweis oder Zeiger auf das Basisklassenobjekt enthält, d. h. die abgeleitete Klasse „besitzt“ das Basisklassenobjekt. SyntaxDas Folgende ist die Syntax für die Implementierung der Funktionsvererbung: classDerivedClass:pu

Vererbung und Polymorphismus wirken sich auf die Kopplung von Klassen aus: Vererbung erhöht die Kopplung, da die abgeleitete Klasse von der Basisklasse abhängt. Polymorphismus reduziert die Kopplung, da Objekte über virtuelle Funktionen und Basisklassenzeiger konsistent auf Nachrichten reagieren können. Zu den Best Practices gehören der sparsame Umgang mit der Vererbung, die Definition öffentlicher Schnittstellen, das Vermeiden des Hinzufügens von Datenelementen zu Basisklassen und die Entkopplung von Klassen durch Abhängigkeitsinjektion. Ein praktisches Beispiel, das zeigt, wie Polymorphismus und Abhängigkeitsinjektion verwendet werden, um die Kopplung in einer Bankkontoanwendung zu reduzieren.

Wie erzwinge ich die Vererbung der endgültigen Proxy-Klasse mit Java? In Java wird das Schlüsselwort final zum Ändern von Klassen, Methoden und Variablen verwendet, um anzuzeigen, dass sie nicht vererbt, überschrieben oder geändert werden können. In einigen Fällen müssen wir jedoch möglicherweise die Vererbung einer letzten Klasse erzwingen, um bestimmte Anforderungen zu erfüllen. In diesem Artikel wird erläutert, wie das Proxy-Muster zum Implementieren einer solchen Funktionalität verwendet wird. Das Proxy-Muster ist ein strukturelles Entwurfsmuster, das es uns ermöglicht, ein Zwischenobjekt (Proxy-Objekt) zu erstellen, das das Verhalten eines anderen Objekts (Proxy-Objekt) steuern kann.

Kapselungstechnologie und Anwendungskapselung in PHP sind ein wichtiges Konzept in der objektorientierten Programmierung. Sie beziehen sich auf die gemeinsame Kapselung von Daten und Operationen auf Daten, um eine einheitliche Zugriffsschnittstelle für externe Programme bereitzustellen. In PHP kann die Kapselung durch Zugriffskontrollmodifikatoren und Klassendefinitionen erreicht werden. In diesem Artikel werden die Kapselungstechnologie in PHP und ihre Anwendungsszenarien vorgestellt und einige spezifische Codebeispiele bereitgestellt. 1. Gekapselte Zugriffskontrollmodifikatoren In PHP wird die Kapselung hauptsächlich durch Zugriffskontrollmodifikatoren erreicht. PHP bietet drei Zugriffskontrollmodifikatoren:
