Dans la société, lors de l'évaluation des capacités et de la valeur d'une personne, il existe souvent deux critères différents : l'un est "basé sur les relations" et l'autre est "basé sur la capacité". Les deux normes sont incarnées dans différentes cultures, secteurs et valeurs personnelles, chacune ayant ses propres partisans et détracteurs.
Dans les langages de programmation, il existe deux types de normes qui organisent le code de différentes manières, reliant les structures de données aux fonctions. Cet article abordera brièvement l'application et le principe d'action de ces deux normes communes.
Dans le langage Javascript, le mot-clé class est fourni, que nous pouvons utiliser pour définir des classes. Il est important de noter que les classes sont extensibles et que lorsque des méthodes sont appelées sur une instance, elles recherchent les définitions de méthodes dans l'ordre de la chaîne de prototypes. Par exemple :
class Animal { move() { return 'move' } } class Monkey extends Animal { jump() { return 'jump' } } class Human extends Monkey { write() { return 'write' } }
extends Les mots-clés peuvent nous aider à définir une nouvelle classe qui s'étend à partir d'autres classes. Nous pouvons obtenir la chaîne prototype comme ceci :
let me = new Human() let proto = me.__proto__ let r = [] while (proto !== null) { r.push(proto.constructor.name) proto = proto.__proto__ }
Nous obtiendrons r comme ceci : ['Humain', 'Singe', 'Animal', 'Object']. Lorsque nous appelons une méthode, le succès de l'appel de méthode dépend de l'existence ou non d'une définition correspondante sur la chaîne de prototypes. Par exemple, si vous appelez me.move(), il a une définition dans la classe Animal et l'appel réussit.
C'est le modèle de classe, que j'aime appeler modèle "relationnel", qui peut être appelé tant qu'il est défini dans la classe de l'instance elle-même, ou dans la classe parent, la classe grand-parent, etc. allumé.
Par rapport au modèle basé sur les relations, le modèle basé sur les compétences est beaucoup plus simple. Tant qu'une instance satisfait un certain trait, la méthode correspondante peut agir sur l'instance quelle que soit la relation de l'instance.
let me = { moveable: true, freezable: false } function move(x) { return x.moveable ? 'move' : undefined } function freeze(x) { return x.freezable ? 'freeze' : undefined }
Dans ce modèle, les données et les méthodes sont indépendantes les unes des autres. L'avantage est qu'il est concis et simple, mais l'inconvénient est évident, en raison de l'indépendance de la méthode et des données, il est difficile de remplacer la définition de la méthode.
Après avoir présenté les deux manières de connecter les structures de données et les méthodes, on peut penser que lorsqu'il est nécessaire d'implémenter des méthodes avec des fonctions différentes du même nom selon la classe des données, il est recommandé d'utiliser le modèle de classe relationnelle . Lorsque la méthode est généralement relativement fixe et que les données sont variables et que la même méthode fonctionne sur des données différentes, le modèle basé sur les compétences peut être utilisé.
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!