Pour rédiger un blog détaillé sur les concepts et les prototypes de programmation orientée objet (POO) de JavaScript, nous passerons en revue les fonctions de première classe, d'abord -instances de classe, héritage, polymorphisme, encapsulation et abstraction, expliquant à la fois basé sur les classes et approches basées sur des prototypes.
JavaScript est unique en ce sens qu'il peut prendre en charge à la fois la POO basée sur les classes (introduite dans ES6) et la POO basée sur les prototypes (la manière originale dont JavaScript gérait la POO). Ce blog plongera dans les concepts clés de la POO tels que les fonctions de première classe, les instances de première classe, l'héritage, le polymorphisme, encapsulation et abstraction en utilisant les deux approches.
En JavaScript, les fonctions sont des citoyens de première classe. Cela signifie que les fonctions peuvent être :
Absolument ! Décomposons l'article de blog pour couvrir à la fois les fonctions de première classe et les instances de première classe en utilisant à la fois des approches fonctionnelles et basées sur les classes en JavaScript. Cela permettra de comprendre clairement ces concepts dans le contexte de la programmation orientée objet (POO).
// Assigning a function to a variable const greet = function(name) { return `Hello, ${name}!`; }; // Passing a function as an argument function logGreeting(fn, name) { console.log(fn(name)); } // Returning a function function createMultiplier(multiplier) { return function(number) { return number * multiplier; }; } logGreeting(greet, "John"); // Output: Hello, John! const double = createMultiplier(2); console.log(double(5)); // Output: 10
Explication :
Bien que les fonctions soient des citoyens de première classe, nous pouvons également créer des classes qui imitent un comportement similaire.
class Greeter { constructor(name) { this.name = name; } greet() { return `Hello, ${this.name}!`; } } // Logging greeting class Logger { static logGreeting(greeter) { console.log(greeter.greet()); } } // Using classes to demonstrate first-class functions const greeter = new Greeter("John"); Logger.logGreeting(greeter); // Output: Hello, John!
Explication :
Les instances d'objets ou de classes peuvent également être traitées comme des citoyens de première classe. Ils peuvent être attribués à des variables, passés en arguments et stockés dans des collections.
Comme les fonctions, les instances d'objets ou de classes peuvent également être traitées comme des citoyens de première classe. Ils peuvent être :
// Assigning a function to a variable const greet = function(name) { return `Hello, ${name}!`; }; // Passing a function as an argument function logGreeting(fn, name) { console.log(fn(name)); } // Returning a function function createMultiplier(multiplier) { return function(number) { return number * multiplier; }; } logGreeting(greet, "John"); // Output: Hello, John! const double = createMultiplier(2); console.log(double(5)); // Output: 10
Explication :
class Greeter { constructor(name) { this.name = name; } greet() { return `Hello, ${this.name}!`; } } // Logging greeting class Logger { static logGreeting(greeter) { console.log(greeter.greet()); } } // Using classes to demonstrate first-class functions const greeter = new Greeter("John"); Logger.logGreeting(greeter); // Output: Hello, John!
Explication :
Héritage basé sur les classes vous permet de créer une nouvelle classe qui hérite des propriétés et des méthodes d'une classe existante à l'aide du mot-clé extends.
function Car(make, model) { this.make = make; this.model = model; this.startEngine = function() { console.log(`${this.make} ${this.model} engine started.`); }; } const myCar = new Car("Toyota", "Corolla"); const yourCar = new Car("Tesla", "Model 3"); // Passing instance as an argument function showCarDetails(car) { console.log(`Car: ${car.make} ${car.model}`); } showCarDetails(myCar); // Output: Car: Toyota Corolla
class Car { constructor(make, model) { this.make = make; this.model = model; } startEngine() { console.log(`${this.make} ${this.model} engine started.`); } } const myCar = new Car("Toyota", "Corolla"); const yourCar = new Car("Tesla", "Model 3"); // Passing instance as an argument function showCarDetails(car) { console.log(`Car: ${car.make} ${car.model}`); } showCarDetails(myCar); // Output: Car: Toyota Corolla
Explication :
Le polymorphisme permet à différents objets de définir leurs propres versions de la même méthode, qui peuvent être appelées sur des objets d'un type parent.
class Animal { constructor(name) { this.name = name; } speak() { console.log(`${this.name} makes a sound.`); } } class Dog extends Animal { speak() { console.log(`${this.name} barks.`); } } const myDog = new Dog("Buddy"); myDog.speak(); // Output: Buddy barks.
function Animal(name) { this.name = name; } Animal.prototype.speak = function() { console.log(`${this.name} makes a sound.`); }; function Dog(name) { Animal.call(this, name); // Inherit properties } Dog.prototype = Object.create(Animal.prototype); // Inherit methods Dog.prototype.constructor = Dog; Dog.prototype.speak = function() { console.log(`${this.name} barks.`); }; const myDog = new Dog("Buddy"); myDog.speak(); // Output: Buddy barks.
Explication :
Encapsulation consiste à masquer les détails internes d'un objet et à n'exposer que ce qui est nécessaire. En JavaScript, nous y parvenons en utilisant des champs privés (avec #) dans la POO basée sur les classes ou des fermetures dans la POO basée sur les prototypes.
class Animal { speak() { console.log("Animal makes a sound."); } } class Dog extends Animal { speak() { console.log("Dog barks."); } } class Cat extends Animal { speak() { console.log("Cat meows."); } } const animals = [new Dog(), new Cat()]; animals.forEach(animal => animal.speak()); // Output: // Dog barks. // Cat meows.
function Animal() {} Animal.prototype.speak = function() { console.log("Animal makes a sound."); }; function Dog() {} Dog.prototype = Object.create(Animal.prototype); Dog.prototype.speak = function() { console.log("Dog barks."); }; function Cat() {} Cat.prototype = Object.create(Animal.prototype); Cat.prototype.speak = function() { console.log("Cat meows."); }; const animals = [new Dog(), new Cat()]; animals.forEach(animal => animal.speak()); // Output: // Dog barks. // Cat meows.
Explication :
Abstraction cache une logique complexe et n'expose que les détails nécessaires. Cela peut être réalisé en faisant abstraction des détails internes et en exposant les méthodes essentielles.
// Assigning a function to a variable const greet = function(name) { return `Hello, ${name}!`; }; // Passing a function as an argument function logGreeting(fn, name) { console.log(fn(name)); } // Returning a function function createMultiplier(multiplier) { return function(number) { return number * multiplier; }; } logGreeting(greet, "John"); // Output: Hello, John! const double = createMultiplier(2); console.log(double(5)); // Output: 10
class Greeter { constructor(name) { this.name = name; } greet() { return `Hello, ${this.name}!`; } } // Logging greeting class Logger { static logGreeting(greeter) { console.log(greeter.greet()); } } // Using classes to demonstrate first-class functions const greeter = new Greeter("John"); Logger.logGreeting(greeter); // Output: Hello, John!
Explication :
Comprendre les différences et les similitudes entre la POO basée sur les classes et la basée sur les prototypes en JavaScript améliore vos compétences en programmation. Les fonctions et instances de première classe, l'héritage, le polymorphisme, l'encapsulation et l'abstraction sont des concepts fondamentaux que vous pouvez exploiter pour écrire un code plus propre et plus maintenable.
Alors que la syntaxe moderne basée sur les classes (introduite dans ES6) est plus lisible et familière aux développeurs issus d'autres langages POO, l'approche basée sur des prototypes est plus fondamentale pour JavaScript. comportement sous-jacent.
Ce blog montre comment les concepts fondamentaux de la POO : fonctions de première classe, instances de première classe, héritage, polymorphisme, encapsulation et abstraction — peuvent être réalisées dans les deux paradigmes. Que vous utilisiez des classes ou des prototypes, JavaScript offre des mécanismes robustes pour implémenter la POO de manière flexible et puissante.
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!