Maison  >  Article  >  interface Web  >  Une introduction à l'analyse des objets prototypes js et des chaînes de prototypes (avec code)

Une introduction à l'analyse des objets prototypes js et des chaînes de prototypes (avec code)

不言
不言original
2018-08-15 15:51:521480parcourir

Ce que cet article vous apporte est une introduction à la connaissance des prototypes js et des chaînes de prototypes (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Déclarez d'abord un constructeur

function People(name,age){
        this.name = name;
        this.age = age;
    }

Écrivez la méthode de classe dans l'objet prototype du constructeur. La sous-classe ne peut plus hériter de la méthode en appelant le constructeur de la classe parent (les attributs peuvent toujours être Hériter).

// 给People的原型添加方法
People.prototype.speak = function(){
        console.log("我是"+this.name);
    }
// 创建子类继承People
function Man(name,age,huzi){
        People.call(this,name,age);
        this.huzi = huzi;
    }

(Les propriétés et méthodes de People et Man peuvent être affichées et appelées pour être affichées, le code de test ne sera pas affiché dans le code)

Comment laisser Man hériter de People à cette fois Méthode ?

Man.prototype = People.prototype;
    Man.prototype.smoke = function(){
        console.log("抽烟");
    }

Cependant, ce n'est pas correct ! Vous ne pouvez pas pointer directement le prototype de la sous-classe vers le prototype de la classe parent. Cela amènera les deux constructeurs à partager un prototype, dans lequel. les méthodes de la classe parent et des objets de la sous-classe sont accessibles, et la situation correcte devrait être que la sous-classe peut accéder aux méthodes de la classe parent, mais la classe parent ne peut pas accéder aux méthodes de la sous-classe

Le prototype de un objet js est aussi un objet, donc le prototype js a aussi un prototype.

Lors de l'accès à une méthode d'un objet, si elle existe dans l'objet, on y accédera directement. S'il n'existe pas, il sera recherché dans le prototype de l'objet. S'il existe, il sera consulté. S'il n'existe pas, il sera recherché dans le prototype du prototype. S'il n'existe pas, il continuera à rechercher en ligne. Jusqu'à ce que l'emplacement de l'objet soit trouvé

L'objet est une classe (constructeur), et le prototype de l'objet de cette classe n'a pas de prototype

Le prototype de l'objet js, et la structure en chaîne composée du prototype du prototype js est appelé js Prototype chain

Si une sous-classe veut hériter des méthodes de la classe parent, elle doit définir le prototype (__proto__) de l'objet prototype du constructeur de la sous-classe sur le prototype du constructeur de la classe parent

C'est tout Écrivez :

Man.prototype.__proto__ = People.prototype;

C'est bien d'écrire comme ça, mais la manière officielle d'écrire est un meilleur standard (ce n'est pas faux)

// Object.create用于指定原型创建一个对象(空对象)
    Man.prototype = Object.create(People.prototype);
    Man.prototype.smoke = function(){
        console.log("抽烟");
    }

Lorsqu'une sous-classe hérite d'une classe parent, sauf Vous pouvez étendre de nouvelles méthodes et vous pouvez également remplacer les méthodes existantes de la classe parent. Lorsque la méthode remplacée est appelée à l'aide d'un objet de sous-classe, la propre méthode de la sous-classe. sera exécuté

Man.prototype.speak = function(){
        console.log("我是男性");
    }

Recommandations associées :

JS Core Series : une brève discussion sur les objets prototypes et les chaînes de prototypes

Chaîne de portée, chaîne de prototypes et héritage prototypique en js

Explication détaillée du prototype js et de la chaîne de prototypes

Apprenez le javascript orienté objet et comprenez les compétences en matière de prototype javascript et de prototype chain_javascript

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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