Maison interface Web js tutoriel JaveScript中的几个关键概念的理解-原型链的构建_javascript技巧

JaveScript中的几个关键概念的理解-原型链的构建_javascript技巧

May 16, 2016 pm 06:06 PM
原型链

Javascript中所有function中都有一个prototype属性,并且这个prototype属性是一个object类型的对象,所有由该function构造出来的对象都具有这个prototype上的特性,也就是说可以用构造出来的对象直接访问prototype上的属性和方法。
下面一段代码演示prototype的使用方法:

复制代码 代码如下:

function Staff(name) {
this.name = name;
}
Staff.prototype.say = function() {
alert(this.name + " say hello");
}
var staff1 = new Staff("hunter");
var staff2 = new Staff("dangjian");
staff1.say();
staff2.say();

运行如上的程序,可知prototype上的属性和方法可以通过创建的对象之间调用,更重要的是prototype中的属性和方法是在同类型的对象中是共享的
复制代码 代码如下:
alert( staff1.say == staff2.say);


prototype另外一个常用的特性是通过prototype构建对象的继承关系,通过把基类对象赋给子类的prototype的方式可以模拟面向对象中的继承关系,这就是大家经常说的JavaScript的面向对象机制。如下的代码段演示了利用这一特性构建对象的继承关系:
复制代码 代码如下:

function Staff(name) { // 基类
this.name = name;
}
Staff.prototype.say = function() {
alert(this.name + " say hello");
}
function ManStaff(name, age) { // 子类
this.name = name;
this.age = age;
}
ManStaff.prototype = new Staff(); // 建立继承关系
var manStaff1 = new ManStaff("hunter", 22);
var manStaff2 = new ManStaff("dangjian", 32);
manStaff1.say();
manStaff2.say();

运行代码可知,ManStaff对象中具有了基类Staff中的Say方法,这种继承方式在JavaScript中是通过prototype链来实现的。大家可能熟悉以上的prototype用法,可是作为程序员,我们不光要知道其用法,我们更应该理解其可是prototype的内部机制。下面我们来分析prototype的原理以及prototype链的实现。
要理解prototype的机制就必须要了解JavaScript中function的创建方式。
当代码执行到function Staff(name) {this.name = name;}时,相当于执行var Staff = new Function(“name”, "this.name = name”)解释器将使用预定义好的Function() constructor,来创建一个function类型的object出来,即Staff。

随后给创建好的Staff对象添加__proto__属性,并赋值为Function的构造器的prototype,这一步是所有对象创建过程中都有的步骤,在执行类似var x = new X()方式是,都会把X的prototype赋值给x的__proto__,类似如下的赋值:
复制代码 代码如下:

Staff.__proto__ = Function.prototype;

接下来给Staff创建prototype属性,这一步是创建function类型的对象具有的步骤,创建的过程如下伪代码:
复制代码 代码如下:

var o = new Object();
o.constructor = Base;
Staff.prototype = o;

如上的分析我们可知,当创建对象时,会创建一个私有属性__proto__,当创建function是会创建一个prototype属性。因为Staff是一个function类型的对象,所以会同时具有这两个属性。
这两个属性是构建原型链的关键属性。我们来分析执行代码 var staff1 = new Staff(“hunter”)时,原型是如何传递的。
根据如上分析,staff1.__proto__ = Staff.prototype,而Staff.prototype又是一个由Object创建的对象,即Staff.prototype.__proto__ = Object.prototype,所以staff1.__proto__ .__proto__ 指向的是Object.prototype,即staff1.__proto__ .__proto__ == Object.prototype,这就是原型链,当要读取某个对象的属性时,JS首先找对象本身是否有这个属性,如果没有就会顺着原型链一直寻找这个属性。
知道了原型链的原理,那么就很容易根据这个原理来构建Javascript中的对象继承。
由如上的分析,我们可知原型链的顶端都是Object.prototype,这就意味着在构建的继承关系中Object是所有对象的基类,可以运行如下的代码验证。
复制代码 代码如下:

Object.prototype.location = "China";
function Staff(name) { // 基类
this.name = name;
}
Staff.prototype.say = function() {
alert(this.name + " say hello");
}
var ManStaff1 = new Staff("hunter");
var ManStaff2 = new Staff("dangjian");
alert(ManStaff1.location);
alert(ManStaff2.location);

运行结果知道,Object是Staff的基类,那么要如何构建一个Staff的子类呢?
理解了上面函数的建立原理,我们很容易写出如下的代码:
复制代码 代码如下:

function Staff(name) { // 基类
this.name = name;
}
Staff.prototype.say = function() {
alert(this.name + " say hello");
}
function ManStaff(name, age) { // 子类
Staff.call(this,name);
this.age = age;
}
ManStaff.prototype = new Staff(); // 建立继承关系
var ManStaff1 = new ManStaff("hunter", 22);
var ManStaff2 = new ManStaff("dangjian", 32);
ManStaff1.say();
ManStaff2.say();

建立继承关系的就是这句:ManStaff.prototype = new Staff(); ,继承关系推算如下:ManStaff1.__proto__ = =ManStaff.prototype, ManStaff.prototype.__proto__ = Staff.prototype, Staff.prototype.__proto__ == Object.prototype;则ManStaff1.__proto__.__proto__.__proto__ == Object.prototype。
javascript中的这种继承关系比较传统面向对象的继承关系更松散,构建方式也比较难以理解,但是作为脚本语言,其功能已经是非常强大了。
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
Nordhold: Système de fusion, expliqué
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1673
14
Tutoriel PHP
1278
29
Tutoriel C#
1257
24
Que sont les prototypes et les chaînes de prototypes Que sont les prototypes et les chaînes de prototypes Nov 09, 2023 pm 05:59 PM

Prototype, un objet en js, est utilisé pour définir les propriétés et les méthodes d'autres objets. Chaque constructeur a un attribut prototype est un pointeur pointant vers un objet prototype. Lorsqu'un nouvel objet est créé, le nouvel objet sera Le. L'attribut prototype de son constructeur hérite des propriétés et des méthodes. Chaîne de prototypes, en essayant d'accéder aux propriétés d'un objet, js vérifiera d'abord si l'objet possède cette propriété. Sinon, alors js se tournera vers le prototype de l'objet. Si l'objet prototype n'a pas cette propriété, il le fera. continuez à chercher le prototype du prototype.

Qu'est-ce que la chaîne de portée et la chaîne de prototypes ? Qu'est-ce que la chaîne de portée et la chaîne de prototypes ? Nov 13, 2023 pm 01:46 PM

La chaîne de portée et la chaîne de prototypes sont deux concepts importants en JavaScript, correspondant respectivement aux deux caractéristiques principales de la portée et de l'héritage : 1. La chaîne de portée est un mécanisme utilisé pour gérer l'accès aux variables et la portée en JavaScript. Elle est formée par Elle est déterminée par le. contexte d'exécution et portée lexicale dans laquelle la fonction est créée ; 2. La chaîne de prototypes est un mécanisme d'implémentation de l'héritage en JavaScript basé sur la relation prototype entre les objets, lors de l'accès aux propriétés ou aux méthodes d'un objet, si l'objet lui-même ne le fait pas. La définition sera recherchée tout au long de la chaîne des prototypes.

Quelle est la différence entre un prototype et une chaîne de prototypes Quelle est la différence entre un prototype et une chaîne de prototypes Nov 09, 2023 pm 04:48 PM

La différence entre un prototype et une chaîne de prototypes est la suivante : 1. Le prototype est un attribut que possède chaque objet, y compris certains attributs et méthodes partagés, qui est utilisé pour réaliser le partage et l'héritage des attributs et des méthodes entre les objets, tandis que la chaîne de prototypes est un héritage. Le mécanisme est mis en œuvre via la relation prototype entre les objets, qui définit la relation d'héritage entre les objets afin que les objets puissent partager les propriétés et les méthodes de l'objet prototype. 2. La fonction du prototype est de définir les propriétés et méthodes partagées de l'objet, afin que plusieurs objets puissent partager les propriétés et les méthodes du même objet prototype, et que la fonction de la chaîne de prototypes est de réaliser la relation d'héritage entre les objets, etc.

A quoi servent les prototypes et les chaînes de prototypes ? A quoi servent les prototypes et les chaînes de prototypes ? Jan 13, 2024 pm 12:58 PM

La raison pour laquelle les prototypes et les chaînes de prototypes existent est d'implémenter l'héritage et le partage des propriétés des objets dans le langage JavaScript. En JavaScript, tout est objet, y compris les fonctions. Chaque objet possède une propriété, appelée prototype, qui pointe vers un autre objet, appelé objet prototype. Les objets peuvent hériter des propriétés et des méthodes des objets prototypes. L'avantage de l'implémentation de propriétés et de méthodes partagées via des prototypes est l'économie de mémoire. Considérons un objet A, qui possède des propriétés et des méthodes, puis créez l'objet B et créez

Quelle est la chaîne de prototypes dans es6 Quelle est la chaîne de prototypes dans es6 Nov 15, 2022 pm 07:28 PM

La chaîne prototype, au sens simple, est une chaîne composée de prototypes. Lors de l'accès à un attribut d'un objet, il recherchera d'abord l'attribut de l'objet lui-même. S'il n'est pas trouvé, il recherchera son prototype implicite __proto__, c'est-à-dire le prototype de son constructeur. pourtant, il recherchera ensuite dans le __proto__ du prototype du constructeur. De cette façon, la recherche vers le haut couche par couche formera une structure de chaîne, appelée chaîne de prototypes.

Discussion approfondie : Analyse du rôle des prototypes et des chaînes de prototypes dans la programmation orientée objet Discussion approfondie : Analyse du rôle des prototypes et des chaînes de prototypes dans la programmation orientée objet Jan 11, 2024 am 11:59 AM

Analyse approfondie : le rôle du prototype et de la chaîne de prototypes dans la programmation orientée objet nécessite des exemples de code spécifiques. Dans la programmation orientée objet (POO), le prototype (Prototype) et la chaîne de prototypes (PrototypeChain) sont des concepts importants. Ils fournissent un mécanisme de réutilisation de code basé sur les objets et jouent un rôle clé dans des langages tels que Javascript. Dans cet article, nous approfondirons les concepts de prototypes et de chaînes de prototypes, explorerons leur rôle dans la POO et illustrerons avec des exemples de code concrets.

Explorez les particularités des prototypes et des chaînes de prototypes Explorez les particularités des prototypes et des chaînes de prototypes Jan 13, 2024 pm 03:50 PM

Explorer les caractéristiques uniques du prototype et de la chaîne de prototypes En JavaScript, le prototype et la chaîne de prototypes sont des concepts très importants. Comprendre les caractéristiques uniques des prototypes et des chaînes de prototypes peut nous aider à mieux comprendre l'héritage et la création d'objets en JavaScript. Un prototype est une propriété appartenant à chaque objet en JavaScript qui pointe vers un autre objet et est utilisée pour partager des propriétés et des méthodes. Chaque objet JavaScript a un prototype

Quelles sont les fonctions du prototype js et de la chaîne de prototypes Quelles sont les fonctions du prototype js et de la chaîne de prototypes Nov 09, 2023 pm 04:56 PM

La fonction du prototype js et de la chaîne de prototypes est de réaliser l'héritage des objets, d'économiser de l'espace mémoire et d'améliorer les performances et la maintenabilité du code. Introduction détaillée : 1. Implémenter l'héritage d'objets. Le prototype et la chaîne de prototypes vous permettent de créer un objet et d'hériter des propriétés et des méthodes d'un autre objet. Lorsque vous créez un nouvel objet, vous pouvez pointer son prototype vers un autre objet, de sorte que. le nouvel objet L'objet peut accéder aux propriétés et aux méthodes de l'objet prototype ; 2. Économiser de la mémoire et améliorer les performances. En JavaScript, chaque objet a un prototype, les objets peuvent partager des prototypes, etc.

See all articles