프로토타입은 JavaScript의 핵심 개념으로, 객체 지향 프로그래밍(OOP) 기능의 기초를 형성합니다. 다른 언어에서는 클래스를 상속의 기초로 사용하는 반면 JavaScript는 프로토타입에 의존합니다. 이 기사에서는 프로토타입을 심층적으로 살펴보고 프로토타입이 JavaScript에서 상속, 개체 동작 등을 어떻게 강화하는지 알아봅니다.
JavaScript에서 모든 객체에는 다른 객체를 가리키는 [[Prototype]]이라는 내부 속성이 있습니다. 이는 객체의 프로토타입이며 객체에서 직접 찾을 수 없는 속성이나 메서드에 대한 대체 메커니즘 역할을 합니다.
프로토타입 체인은 일련의 연결된 프로토타입입니다. 개체에서 속성이나 메서드를 찾을 수 없는 경우 JavaScript는 null에 도달할 때까지 체인을 검색합니다.
const parent = { greet: () => console.log("Hello from parent!") }; const child = Object.create(parent); child.greet(); // Output: "Hello from parent!" console.log(child.hasOwnProperty('greet')); // Output: false
여기서 하위에는 Greeting 메소드가 없으므로 JavaScript는 프로토타입 체인을 상위로 검색하여 찾습니다.
JavaScript는 프로토타입과 관련하여 혼란스러울 수 있는 두 가지 용어를 제공합니다.
__proto__:
프로토타입:
예:
function Person(name) { this.name = name; } Person.prototype.sayHello = function () { console.log(`Hello, my name is ${this.name}`); }; const alice = new Person("Alice"); console.log(alice.__proto__ === Person.prototype); // true alice.sayHello(); // Output: "Hello, my name is Alice"
JavaScript의 상속은 프로토타입 기반입니다. 즉, 객체는 클래스가 아닌 다른 객체로부터 직접 상속됩니다.
상속 만들기
const animal = { eat() { console.log("Eating..."); } }; const dog = Object.create(animal); dog.bark = function () { console.log("Barking..."); }; dog.eat(); // Output: "Eating..." dog.bark(); // Output: "Barking..."
개 개체는 동물 개체의 eat 메소드를 상속받습니다.
Object.create 메소드는 지정된 프로토타입을 사용하여 새 객체를 생성합니다. 상속을 설정하는 더 깔끔하고 직관적인 방법입니다.
예:
const person = { introduce() { console.log(`Hi, I'm ${this.name}`); } }; const student = Object.create(person); student.name = "John"; student.introduce(); // Output: "Hi, I'm John"
배열이나 객체와 같은 내장 프로토타입을 확장하는 것은 가능하지만 충돌이 발생할 수 있으므로 일반적으로 권장되지 않습니다.
예:
Array.prototype.last = function () { return this[this.length - 1]; }; console.log([1, 2, 3].last()); // Output: 3
왜 피해야 할까요?
ES6에서는 JavaScript에 클래스 구문이 도입되어 보다 친숙한 OOP 경험을 제공합니다. 그러나 내부적으로는 수업에서 여전히 프로토타입을 사용합니다.
예:
const parent = { greet: () => console.log("Hello from parent!") }; const child = Object.create(parent); child.greet(); // Output: "Hello from parent!" console.log(child.hasOwnProperty('greet')); // Output: false
클래스에서도 상속은 프로토타입 기반입니다.
프로토타입 기반 상속은 메서드가 중복되지 않고 인스턴스 간에 공유되므로 메모리 효율성이 더 높습니다.
예:
function Person(name) { this.name = name; } Person.prototype.sayHello = function () { console.log(`Hello, my name is ${this.name}`); }; const alice = new Person("Alice"); console.log(alice.__proto__ === Person.prototype); // true alice.sayHello(); // Output: "Hello, my name is Alice"
여기서는 차량마다 드라이브가 중복되지 않습니다. 대신 두 인스턴스 모두 동일한 방법을 공유합니다.
JavaScript를 마스터하려면 프로토타입에 대한 이해가 필수적입니다. ES6 클래스가 JavaScript의 객체 지향 프로그래밍을 더욱 접근하기 쉽게 만들었지만 프로토타입 시스템은 여전히 언어의 핵심입니다. 프로토타입을 자세히 살펴보면 효율적이고 확장 가능하며 유지 관리 가능한 코드를 작성할 수 있는 능력을 얻을 수 있습니다.
위 내용은 프로토타입 심층 분석: JavaScript의 중추의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!