Table des matières
Emballage" >Emballage
Héritage" >Héritage
Polymorphisme" >Polymorphisme
总结" >总结
Maison interface Web js tutoriel Introduction aux trois caractéristiques de base du javascript orienté objet

Introduction aux trois caractéristiques de base du javascript orienté objet

Oct 21, 2020 pm 05:53 PM
javascript 面向对象

Introduction aux trois caractéristiques de base du javascript orienté objet

Les étudiants qui ont appris l'orientation objet devraient tous savoir que les trois caractéristiques de base de l'orientation objet sont : l'encapsulation, l'héritage et le polymorphisme, mais ils ne savent peut-être pas grand-chose sur ces trois mots. Pour le front-end, les plus exposés peuvent être 封装 et 继承, mais le polymorphisme n'est peut-être pas aussi compris.

Emballage

Avant de parler d'emballage, comprenons d'abord ce qu'est l'emballage ?

Qu'est-ce que l'encapsulation

Encapsulation : Encapsuler les ressources nécessaires à l'exécution de l'objet dans l'objet programme - basique Ci-dessus, vous trouverez les méthodes et les données. Un objet "expose son interface". D'autres objets attachés à ces interfaces peuvent utiliser cet objet sans se soucier des méthodes implémentées par l'objet. Le concept est « ne me dites pas comment vous faites, faites-le ». Un objet peut être considéré comme un atome autonome. L'interface objet comprend des méthodes publiques et des données d'initialisation. (Extrait de l'Encyclopédie Baidu)

Ma compréhension de l'encapsulation, il peut y avoir une autre étape qui est 抽离Tout d'abord, vous devez être clair sur les méthodes d'attribut que vous devez séparer d'une paire de codes. Avec ceux-ci comme base Ce n'est qu'ainsi que l'emballage pourra être mieux réalisé.

L'encapsulation n'est rien d'autre que l'encapsulation de ses propriétés et méthodes.

  1. Classe : encapsule les propriétés et le comportement des objets

  2. Méthode : encapsule des fonctions logiques spécifiques

  3. Encapsulation d'accès : L'encapsulation de modification d'accès n'est rien d'autre que d'encapsuler ses droits d'accès

class Employees {
    constructor(name,age){
        this.name = name;
        this.age = age;
    }
    getInfo(){
        let {name,age} = this;
        return {name,age};
    }
    static seyHi(){
        console.log("Hi");   
    }
}

let lisi = new Employees("Aaron",18);
lisi.seyHi();   // lisi.seyHi is not a function
lisi.getInfo();  // {name: "Aaron", age: 18}
Employees.seyHi();  // Hi
Copier après la connexion

Les attributs publics extraits dans Employees sont name, age, et les méthodes publiques sont getInfo,seyHi, cependant, la différence entre getInfo et seyHi est que seyHi utilise le modificateur static, le changeant en méthode statique seyHi n'appartient qu'à la classe Employees. . Cependant, la méthode getInfo appartient aux instances.

Ici, static est utilisé pour encapsuler les droits d'accès de la méthode seyHi.

Donnez un autre exemple.

Promise.then()  //  Promise.then is not a function
let p1 = new Promise(() => {})
p1.then();  //  Promise {<pending>}
Promise.all([1]);   //  Promise {<resolved>: Array(1)}
Copier après la connexion

Comme vous pouvez le voir dans le code ci-dessus, Promise utilise également static pour encapsuler les autorisations d'accès de ses méthodes.

Héritage

Héritage : Parler d'héritage n'est pas inconnu. L'héritage peut donner aux sous-classes diverses propriétés publiques de la classe parent属性 et. publique 方法. Sans avoir à réécrire le même code. Tout en laissant la sous-catégorie hériter de la catégorie parent, vous pouvez redéfinir certains attributs et remplacer certaines méthodes, c'est-à-dire écraser les attributs et méthodes d'origine de la catégorie parent afin qu'elle puisse obtenir différentes fonctions de la catégorie parent. (Extrait de l'Encyclopédie Baidu)

Une fois qu'une sous-classe hérite de la classe parent, la sous-classe possède les propriétés et les méthodes de la classe parent, mais elle possède également ses propres propriétés et méthodes uniques. la sous-classe doit être supérieure ou identique à la classe parent, pas inférieure à la classe parent.

class Employees {
    constructor(name){
        this.name = name;
    }
    getName(){
        console.log(this.name)
    }
    static seyHi(){
        console.log("Hi");   
    }
}
class Java extends Employees{
    constructor(name){
        super(name);
    }
    work(){
        console.log("做后台工作");
    }
}
let java = new Java("Aaron");
java.getName();
java.work();
// java.seyHi();    //  java.seyHi is not a function
Copier après la connexion

À partir de l'exemple ci-dessus, nous pouvons voir que l'héritage n'héritera pas des méthodes statiques de la classe parent, mais uniquement des propriétés et méthodes publiques de la classe parent. Cela nécessite une attention particulière. Après l'héritage de la sous-classe

, elle possède non seulement la méthode getName, mais possède également sa propre méthode worker.

Polymorphisme

Polymorphisme : Signifie littéralement « plusieurs états », permettant d'attribuer des pointeurs de types de sous-classes au parent Pointeur vers le type de classe. (Extrait de l'Encyclopédie Baidu)

Pour parler franchement, le polymorphisme est la même chose, lorsque la même méthode est appelée et que les paramètres sont les mêmes, le comportement est différent. Le polymorphisme est divisé en deux types, l’un est le polymorphisme comportemental et le polymorphisme objet.

Réécriture et surcharge d'expressions polymorphes.

Qu'est-ce qui est prioritaire

Overriding : Les sous-classes peuvent hériter des méthodes de la classe parent sans réécrire la même méthode. Mais parfois, la sous-classe ne souhaite pas hériter des méthodes de la classe parent inchangées, mais souhaite apporter certaines modifications, ce qui nécessite une réécriture des méthodes. Le remplacement de méthode est également appelé remplacement de méthode. (Extrait de l'Encyclopédie Baidu)

class Employees {
    constructor(name){
        this.name = name;
    }
    seyHello(){
        console.log("Hello")
    }
    getName(){
        console.log(this.name);
    }
}
class Java extends Employees{
    constructor(name){
        super(name);
    }
    seyHello(){
        console.log(`Hello,我的名字是${this.name},我是做Java工作的。`)
    }
}
const employees = new Employees("Aaron");
const java = new Java("Leo");
employees.seyHello();   //  Hello
java.seyHello();    //  Hello,我的名字是Leo,我是做Java工作的。
employees.getName();    //  Aaron
java.getName(); //  Leo
Copier après la connexion

Comme le montre le code ci-dessus, Java hérite de Employees Cependant, il existe seyHello méthodes dans les sous-classes et les classes parentes afin de répondre à différentes. besoins, sous-classes Après avoir hérité de la classe parent, la méthode seyHello est remplacée. Vous obtiendrez donc des résultats différents lors de votre appel. Puisque la sous-classe hérite de la classe parent, la sous-classe possède également la méthode getName de la classe parent.

Qu'est-ce que la surcharge

重载就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。(节选自百度百科)

class Employees {
    constructor(arg){
        let obj = null;
        switch(typeof arg)
        {
            case "string":
                  obj = new StringEmployees(arg);
                  break;
            case "object":
                  obj = new ObjEmployees(ObjEmployees);
                  break;
            case "number":
                obj = new NumberEmployees(ObjEmployees);
                break;
        }
        return obj;
    }
}
class ObjEmployees {
    constructor(arg){
        console.log("ObjEmployees")
    }
}
class StringEmployees {
    constructor(arg){
        console.log("StringEmployees")
    }
}
class NumberEmployees {
    constructor(arg){
        console.log("NumberEmployees")
    }
}
new Employees({})   // ObjEmployees
new Employees("123456") //  StringEmployees
new Employees(987654)   //  NumberEmployees
Copier après la connexion

因为JavaScript是没有重载的概念的所以要自己编写逻辑完成重载。

在上面的代码中定义了Employees,ObjEmployees,StringEmployees,NumberEmployees类,在实例化Employees的时候在constructor里面进行了判断,根据参数的不同返回不同的对应的类。

这样完成了一个简单的类重载。

总结

  1. 封装可以隐藏实现细节,使得代码模块化;

  2. 继承可以扩展已存在的代码模块(类),它们的目的都是为了——代码重用。

  3. 多态就是相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。多态分为两种,一种是行为多态与对象的多态。

在编程的是多多运用这个写思想对其编程时很有用的,能够使你的代码达到高复用以及可维护。

相关免费学习推荐:js视频教程

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 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 !

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)

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Explorez la programmation orientée objet dans Go Explorez la programmation orientée objet dans Go Apr 04, 2024 am 10:39 AM

Le langage Go prend en charge la programmation orientée objet via la définition de type et l'association de méthodes. Il ne prend pas en charge l'héritage traditionnel, mais est mis en œuvre par composition. Les interfaces assurent la cohérence entre les types et permettent de définir des méthodes abstraites. Des cas pratiques montrent comment utiliser la POO pour gérer les informations client, notamment la création, l'obtention, la mise à jour et la suppression d'opérations client.

Fonctionnalités avancées PHP : meilleures pratiques en matière de programmation orientée objet Fonctionnalités avancées PHP : meilleures pratiques en matière de programmation orientée objet Jun 05, 2024 pm 09:39 PM

Les meilleures pratiques de POO en PHP incluent les conventions de dénomination, les interfaces et les classes abstraites, l'héritage et le polymorphisme, ainsi que l'injection de dépendances. Les cas pratiques incluent : l'utilisation du mode entrepôt pour gérer les données et l'utilisation du mode stratégie pour mettre en œuvre le tri.

Analyse des fonctionnalités orientées objet du langage Go Analyse des fonctionnalités orientées objet du langage Go Apr 04, 2024 am 11:18 AM

Le langage Go prend en charge la programmation orientée objet, définissant des objets via des structures, définissant des méthodes à l'aide de récepteurs de pointeurs et implémentant le polymorphisme via des interfaces. Les fonctionnalités orientées objet assurent la réutilisation, la maintenabilité et l'encapsulation du code dans le langage Go, mais il existe également des limitations telles que le manque de concepts traditionnels de classes et d'héritage et de conversions de signatures de méthodes.

Existe-t-il des fonctionnalités orientées objet de type classe dans Golang ? Existe-t-il des fonctionnalités orientées objet de type classe dans Golang ? Mar 19, 2024 pm 02:51 PM

Il n'y a pas de concept de classe au sens traditionnel dans Golang (langage Go), mais il fournit un type de données appelé structure, à travers lequel des fonctionnalités orientées objet similaires aux classes peuvent être obtenues. Dans cet article, nous expliquerons comment utiliser les structures pour implémenter des fonctionnalités orientées objet et fournirons des exemples de code concrets. Définition et utilisation des structures Examinons d'abord la définition et l'utilisation des structures. Dans Golang, les structures peuvent être définies via le mot-clé type, puis utilisées si nécessaire. Les structures peuvent contenir des attributs

Comment obtenir facilement le code d'état HTTP en JavaScript Comment obtenir facilement le code d'état HTTP en JavaScript Jan 05, 2024 pm 01:37 PM

Introduction à la méthode d'obtention du code d'état HTTP en JavaScript : Dans le développement front-end, nous devons souvent gérer l'interaction avec l'interface back-end, et le code d'état HTTP en est une partie très importante. Comprendre et obtenir les codes d'état HTTP nous aide à mieux gérer les données renvoyées par l'interface. Cet article explique comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournit des exemples de code spécifiques. 1. Qu'est-ce que le code d'état HTTP ? Le code d'état HTTP signifie que lorsque le navigateur lance une requête au serveur, le service

Compréhension approfondie de la programmation orientée objet PHP : techniques de débogage pour la programmation orientée objet Compréhension approfondie de la programmation orientée objet PHP : techniques de débogage pour la programmation orientée objet Jun 05, 2024 pm 08:50 PM

En maîtrisant le suivi de l'état des objets, la définition de points d'arrêt, le suivi des exceptions et l'utilisation de l'extension xdebug, vous pouvez déboguer efficacement le code de programmation orienté objet PHP. 1. Suivez l'état de l'objet : utilisez var_dump() et print_r() pour afficher les attributs de l'objet et les valeurs des méthodes. 2. Définir un point d'arrêt : définissez un point d'arrêt dans l'environnement de développement et le débogueur se mettra en pause lorsque l'exécution atteint le point d'arrêt, ce qui facilitera la vérification de l'état de l'objet. 3. Tracez les exceptions : utilisez les blocs try-catch et getTraceAsString() pour obtenir la trace de la pile et le message lorsque l'exception se produit. 4. Utilisez le débogueur : La fonction xdebug_var_dump() peut inspecter le contenu des variables pendant l'exécution du code.

JavaScript et WebSocket : créer un moteur de recherche en temps réel efficace JavaScript et WebSocket : créer un moteur de recherche en temps réel efficace Dec 17, 2023 pm 10:13 PM

JavaScript et WebSocket : Construire un moteur de recherche en temps réel efficace Introduction : Avec le développement d'Internet, les utilisateurs ont des exigences de plus en plus élevées en matière de moteurs de recherche en temps réel. Lors d'une recherche avec les moteurs de recherche traditionnels, les utilisateurs doivent cliquer sur le bouton de recherche pour obtenir des résultats. Cette méthode ne peut pas répondre aux besoins des utilisateurs en matière de résultats de recherche en temps réel. Par conséquent, l’utilisation des technologies JavaScript et WebSocket pour mettre en œuvre des moteurs de recherche en temps réel est devenue un sujet brûlant. Cet article présentera en détail l'utilisation de JavaScript

See all articles