JavaScript のオブジェクト指向プログラミング (OOP) の概念と プロトタイプ について詳細なブログを書くには、ファーストクラス関数、最初に説明します。 - クラスインスタンス、継承、ポリモーフィズム、カプセル化、および抽象化、クラスベース および プロトタイプベース のアプローチ。
クラスベースの OOP (ES6 で導入) と プロトタイプベースの OOP (JavaScript が OOP を処理する元の方法) の両方をサポートできるという点で独特です。このブログでは、ファーストクラス関数、ファーストクラス インスタンス、継承、ポリモーフィズム、 などの主要な OOP 概念について詳しく説明します。カプセル化と抽象化の両方のアプローチを使用します。
第一級市民です。これは、関数が次のとおりであることを意味します。
ファーストクラス関数 と ファーストクラス インスタンス の両方をカバーしましょう。これにより、オブジェクト指向プログラミング (OOP) のコンテキストにおけるこれらの概念を明確に理解できるようになります。
// 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!
説明:
第一級市民として扱うこともできます。これらは、変数に割り当てたり、引数として渡したり、コレクションに保存したりできます。
関数と同様に、オブジェクトやクラスのインスタンスも第一級市民として扱うことができます。それらは次のとおりです:
// 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!
説明:
クラスベースの継承 を使用すると、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
説明:
ポリモーフィズムにより、さまざまなオブジェクトが同じメソッドの独自のバージョンを定義でき、親型のオブジェクトに対して呼び出すことができます。
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.
説明:
カプセル化には、オブジェクトの内部の詳細を隠し、必要なものだけを公開することが含まれます。 JavaScript では、クラスベースの OOP のプライベート フィールド (# 付き) または プロトタイプ ベースの OOP のクロージャーを使用してこれを実現します。
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.
説明:
抽象化 は、複雑なロジックを隠し、必要な詳細のみを公開します。これは、内部の詳細を抽象化し、重要なメソッドを公開することで実現できます。
// 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!
説明:
JavaScript における クラスベース と プロトタイプベース OOP の違いと類似点を理解すると、プログラミング スキルが向上します。ファーストクラスの関数とインスタンス、継承、ポリモーフィズム、カプセル化、抽象化は、よりクリーンで保守しやすいコードを作成するために活用できる基本的な概念です。
最新の クラスベース 構文 (ES6 で導入) は他の OOP 言語から来た開発者にとって読みやすく親しみやすいものですが、プロトタイプベース のアプローチは JavaScript のより基本的なものです。根本的な動作。
このブログでは、OOP の中心的な概念、ファーストクラス関数、ファーストクラス インスタンス、継承、ポリモーフィズム、カプセル化と抽象化 — どちらのパラダイムでも実現できます。クラスを使用しているかプロトタイプを使用しているかに関係なく、JavaScript は柔軟かつ強力な方法で OOP を実装するための堅牢なメカニズムを提供します。
以上がJavaScript OOP の概念: クラスベースとプロトタイプベースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。