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!
설명:
클래스 기반 상속을 사용하면 확장 키워드를 사용하여 기존 클래스의 속성과 메서드를 상속하는 새 클래스를 만들 수 있습니다.
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 개념: 클래스 기반 vs. 프로토타입 기반의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!