기본 클래스 선언과 생성자class Book { // 생성자를 통해 인스턴스 초기화 constructor(title, author) { this.title = title; this.author = author; } // 인스턴스 메서드 정의 getSummary() { return `${this.title}은(는) ${this.author}의 작품입니다.`; }}const novel = new Book("해리 포터", "J.K. 롤링");console.log(novel.getSummary()); // 출력: 해리 포터은(는) J.K. 롤링의 작품입니다.new Book(...)을 호출하면 새로운 객체가 생성되고, 해당 객체의 [[Prototype]]은 Book.prototype을 ..
Object.createObject.create 메서드는 지정한 객체를 프로토타입으로 하는 새로운 객체를 생성합니다. 이를 통해 객체 상속을 명확하고 직관적으로 구현할 수 있습니다.// 예시: 'vehicle' 객체를 프로토타입으로 하는 'car' 객체 생성const vehicle = { wheels: 4, start() { console.log(`${this.model}가 시동을 겁니다.`); }};const car = Object.create(vehicle);car.model = "Sedan";car.start(); // 출력: Sedan가 시동을 겁니다.console.log(car.wheels); // 출력: 4 (프로토타입으로부터 상속)두 번째 매개변수로 프로퍼티 설명자(properti..
Object.prototype과 프로토타입 체인의 기반모든 객체의 최상위 프로토타입은 Object.prototype 입니다. 객체 리터럴이나 new Object()로 생성한 객체의 내부 [[Prototype]]은 기본적으로 Object.prototype을 참조합니다. 이에 따라 빈 객체라도 Object.prototype에 정의된 메서드를 사용할 수 있습니다.const obj = {}; // 또는 new Object();console.log(Object.getPrototypeOf(obj) === Object.prototype); // true// Object.prototype의 메서드 사용console.log(obj.toString()); // "[object Object]"console...
기본 동작 원리모든 함수는 기본적으로 prototype 프로퍼티를 자동으로 갖습니다. 이 프로퍼티는 constructor 프로퍼티만을 가진 객체를 참조합니다.function Person(name) { this.name = name;}// 내부적으로 자바스크립트는 다음과 유사하게 처리합니다:// Person.prototype = { constructor: Person }여기서 Person.prototype은 기본적으로 constructor 프로퍼티를 가지며, 이는 함수 자신(Person)을 참조합니다. 새로운 객체를 생성할 때 new Person("Alice")를 호출하면 자바스크립트는 다음과 같은 절차를 따릅니다.빈 객체 {}를 생성합니다.이 객체의 내부 [[Prototype]]을 Person.prot..
프로토타입 상속의 개념[[Prototype]] 내부 프로퍼티모든 객체는 자신의 프로퍼티 외에 [[Prototype]] 이라는 내부 슬롯을 가지고 있습니다. 이 슬롯은 다른 객체를 참조할 수 있는데, 이 참조 대상을 프로토타입이라고 부릅니다. 프로퍼티 검색시, 해당 객체에 없으면 프로토타입 체인을 따라 상위 객체에서 검색합니다.상속 프로퍼티프로토타입 객체에 정의된 프로퍼티나 메서드는 모든 하위 객체에서 사용할 수 있습니다. 하위 객체에 동일한 이름의 프로퍼티가 존재하면, 프로토타입의 프로퍼티를 덮어씁니다.메서드 내의 this프로토타입에서 상속된 메서드를 호출할 때, 메서드 내부의 this는 해당 메서드를 호출한 객체를 참조합니다. 따라서 여러 객체가 동일한 메서드를 공유하더라도, 각 객체의 상태를 독립적으..
객체 리터럴에서 접근자 프로퍼티 정의하기객체 리터럴을 사용하여 접근자 프로퍼티를 정의할 때는 get과 set 키워드를 사용합니다. 예를 들어, 원의 반지름을 가지고 면적과 둘레를 계산하는 객체를 만들어보겠습니다.let circle = { radius: 10, // 면적(area)을 계산하는 getter get area() { return Math.PI * this.radius ** 2; }, // 둘레(circumference)를 계산하는 getter get circumference() { return 2 * Math.PI * this.radius; }, // 반지름을 설정하는 setter set diameter(diameter) { this.radius = diamete..