Heim Web-Frontend js-Tutorial 基于JavaScript实现继承机制之原型链(prototype chaining)的详解_javascript技巧

基于JavaScript实现继承机制之原型链(prototype chaining)的详解_javascript技巧

May 16, 2016 pm 05:34 PM
原型链

如果用原型方式重定义前面例子中的类,它们将变为下列形式:

复制代码 代码如下:

function ClassA() {
}

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

function ClassB() {
}

ClassB.prototype = new ClassA();


原型方式的神奇之处在于最后一行代码。这里,把 ClassB 的 prototype 属性设置成 ClassA 的实例。这很有意思,因为想要 ClassA 的所有属性和方法,但又不想逐个将它们 添加到ClassB 的 prototype 属性。还有比把 ClassA 的实例赋予 prototype 属性更好的方法吗?

注意:调用 ClassA 的构造函数,没有给它传递参数。这在原型链中是标准做法。要确保构造函数没有任何参数。

与对象冒充相似,子类的所有属性和方法都必须出现在 prototype 属性被赋值后,因为在它之前赋值的所有方法都会被删除。为什么?因为 prototype 属性被替换成了新对象,添加了新方法的原始对象将被销毁。所以,为 ClassB 类添加 name 属性和 sayName() 方法的代码如下:

复制代码 代码如下:

function ClassB() {
}

ClassB.prototype = new ClassA();

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


可通过运行下面的例子测试这段代码:
复制代码 代码如下:

var objA = new ClassA();
var objB = new ClassB();
objA.color = "blue";
objB.color = "red";
objB.name = "John";
objA.sayColor();
objB.sayColor();
objB.sayName();

此外,在原型链中,instanceof 运算符的运行方式也很独特。对 ClassB 的所有实例,instanceof 为 ClassA 和 ClassB 都返回 true。例如:
复制代码 代码如下:

var objB = new ClassB();
alert(objB instanceof ClassA);    //输出 "true"
alert(objB instanceof ClassB);    //输出 "true"

在 ECMAScript 的弱类型世界中,这是极其有用的工具,不过使用对象冒充时不能使用该方法判断。但是由于子类的原型被直接重新赋值,所以出现以下这种情况:
复制代码 代码如下:

console.log(objB.__proto__===objB.constructor.prototype)   //false

因为ClassB的原型链 prototype 属性被另一个类的对象重写了。输出结果可以看出objB.__proto__仍然指向的是ClassB.prototype,而不是objB.constructor.prototype。这也很好理解,给Person.prototype赋值的是一个对象直接量new ClassA()实例,使用对象直接量方式定义的对象其构造器(constructor)指向的是根构造器Object,Object.prototype是一个空对象{},{}自然与ClassB.prototype不等。
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

Video Face Swap

Video Face Swap

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

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)

Was sind Prototypen und Prototypenketten? Was sind Prototypen und Prototypenketten? Nov 09, 2023 pm 05:59 PM

Prototyp, ein Objekt in js, wird verwendet, um die Eigenschaften und Methoden anderer Objekte zu definieren. Dieses Attribut ist ein Zeiger, der auf ein Prototypobjekt zeigt Das Prototypattribut seines Konstruktors erbt Eigenschaften und Methoden. Prototypkette: Wenn js versucht, auf die Eigenschaften eines Objekts zuzugreifen, prüft es zunächst, ob das Objekt über diese Eigenschaft verfügt. Wenn nicht, wendet sich js an den Prototyp des Objekts. Wenn das Prototypobjekt diese Eigenschaft nicht hat Suchen Sie weiterhin nach dem Prototyp des Prototyps.

Was ist Scope Chain und Prototyp Chain? Was ist Scope Chain und Prototyp Chain? Nov 13, 2023 pm 01:46 PM

Bereichskette und Prototypenkette sind zwei wichtige Konzepte in JavaScript, die den beiden Kernfunktionen Bereich bzw. Vererbung entsprechen: 1. Bereichskette ist ein Mechanismus zur Verwaltung des Variablenzugriffs und -bereichs in JavaScript. Sie wird durch bestimmt Ausführungskontext und lexikalischer Bereich, in dem die Funktion erstellt wird. 2. Die Prototypkette ist ein Mechanismus zur Implementierung der Vererbung in JavaScript, der auf der Prototypbeziehung zwischen Objekten basiert, wenn auf die Eigenschaften oder Methoden eines Objekts zugegriffen wird Definition, wird entlang der Prototypenkette gesucht.

Was ist der Unterschied zwischen Prototyp und Prototypkette? Was ist der Unterschied zwischen Prototyp und Prototypkette? Nov 09, 2023 pm 04:48 PM

Der Unterschied zwischen Prototyp und Prototypkette ist: 1. Prototyp ist ein Attribut, das jedes Objekt hat, einschließlich einiger gemeinsamer Attribute und Methoden, das verwendet wird, um die gemeinsame Nutzung und Vererbung von Attributen und Methoden zwischen Objekten zu realisieren, während die Prototypkette ein ist Die Vererbung Der Mechanismus wird durch die Prototypbeziehung zwischen Objekten implementiert, die die Vererbungsbeziehung zwischen Objekten definiert, sodass Objekte die Eigenschaften und Methoden des Prototypobjekts teilen können. Die Funktion des Prototyps besteht darin, die gemeinsamen Eigenschaften und Methoden des Objekts zu definieren. Damit mehrere Objekte die Eigenschaften und Methoden desselben Prototypobjekts gemeinsam nutzen können und die Funktion der Prototypkette darin besteht, die Vererbungsbeziehung zwischen Objekten usw. zu realisieren.

Welchen Zweck haben Prototypen und Prototypenketten? Welchen Zweck haben Prototypen und Prototypenketten? Jan 13, 2024 pm 12:58 PM

Der Grund für die Existenz von Prototypen und Prototypketten besteht darin, die Vererbung und gemeinsame Nutzung von Objekteigenschaften in der JavaScript-Sprache zu implementieren. In JavaScript ist alles ein Objekt, auch Funktionen. Jedes Objekt verfügt über eine Eigenschaft, die als Prototyp bezeichnet wird und auf ein anderes Objekt verweist, das als Prototypobjekt bezeichnet wird. Objekte können Eigenschaften und Methoden von Prototypobjekten erben. Der Vorteil der Implementierung gemeinsamer Eigenschaften und Methoden durch Prototypen liegt in der Speichereinsparung. Betrachten Sie ein Objekt A, das über einige Eigenschaften und Methoden verfügt, erstellen Sie dann Objekt B und erstellen Sie es

Was ist die Prototypenkette in es6? Was ist die Prototypenkette in es6? Nov 15, 2022 pm 07:28 PM

Einfach verstanden ist die Prototypenkette eine Kette, die aus Prototypen besteht. Beim Zugriff auf ein Attribut eines Objekts wird zunächst nach dem Attribut des Objekts selbst gesucht. Wenn es nicht gefunden wird, wird nach seinem impliziten Prototyp __proto__ gesucht, d. h. nach dem Prototyp seines Konstruktors Dennoch wird dann im __proto__ des Prototyps des Konstruktors gesucht. Auf diese Weise wird durch die Suche nach oben eine Kettenstruktur gebildet, die als Prototypenkette bezeichnet wird.

Vertiefende Diskussion: Analyse der Rolle von Prototypen und Prototypketten in der objektorientierten Programmierung Vertiefende Diskussion: Analyse der Rolle von Prototypen und Prototypketten in der objektorientierten Programmierung Jan 11, 2024 am 11:59 AM

Eingehende Analyse: Die Rolle von Prototypen und Prototypenketten in der objektorientierten Programmierung erfordert spezifische Codebeispiele. In der objektorientierten Programmierung (OOP) sind Prototypen (Prototype) und Prototypenketten (PrototypeChain) wichtige Konzepte. Sie bieten einen objektbasierten Mechanismus zur Wiederverwendung von Code und spielen eine Schlüsselrolle in Sprachen wie Javascript. In diesem Artikel werden wir uns eingehend mit den Konzepten von Prototypen und Prototypenketten befassen, ihre Rolle in OOP untersuchen und anhand konkreter Codebeispiele veranschaulichen

Was sind die Funktionen des js-Prototyps und der Prototypenkette? Was sind die Funktionen des js-Prototyps und der Prototypenkette? Nov 09, 2023 pm 04:56 PM

Die Funktion des js-Prototyps und der Prototypenkette besteht darin, die Vererbung von Objekten zu realisieren, Speicherplatz zu sparen und die Leistung und Wartbarkeit des Codes zu verbessern. Detaillierte Einführung: 1. Implementieren Sie die Vererbung von Objekten. Mit dem Prototyp und der Prototypenkette können Sie ein Objekt erstellen und die Eigenschaften und Methoden eines anderen Objekts erben Das neue Objekt kann auf die Eigenschaften und Methoden des Prototypobjekts zugreifen. In JavaScript verfügt jedes Objekt über einen Prototyp.

Entdecken Sie die Besonderheiten von Prototypen und Prototypenketten Entdecken Sie die Besonderheiten von Prototypen und Prototypenketten Jan 13, 2024 pm 03:50 PM

Erkundung der einzigartigen Merkmale von Prototypen und Prototypenketten In JavaScript sind Prototypen und Prototypenketten sehr wichtige Konzepte. Das Verständnis der einzigartigen Merkmale von Prototypen und Prototypketten kann uns helfen, die Vererbung und Objekterstellung in JavaScript besser zu verstehen. Ein Prototyp ist eine Eigenschaft, die jedem Objekt in JavaScript gehört, die auf ein anderes Objekt verweist und zum Teilen von Eigenschaften und Methoden verwendet wird. Jedes JavaScript-Objekt hat einen Prototyp

See all articles