JavaScript 프로토타입 Prototype / Codestates 22일차

원기

프로토타입은 프로토타입 객체입니다.

JavaScript는 프로토타입 기반 언어입니다.

배열 클래스, 인스턴스 및 프로토타입 간의 관계

Array는 Array 클래스의 인스턴스이며 해당 프로토타입에는 다양한 메서드가 포함되어 있습니다.

프로토타입 체인

모든 개체에는 메서드와 속성을 상속하기 위한 템플릿으로 프로토타입 개체가 있습니다.

프로토타입 개체는 부모 프로토타입 개체에서 메서드와 속성을 상속할 수도 있으며 부모 프로토타입 개체도 마찬가지입니다. 이것을 프로토타입 체인이라고 합니다.

__proto__

JavaScript에서는 개체 인스턴스와 해당 프로토타입 사이에 링크가 설정되고 해당 링크를 따라 프로토타입 체인을 위로 이동하여 속성과 메서드를 검사합니다. 인스턴스의 __proto__를 사용하여 상위 클래스의 프로토타입 또는 “부모의 상위 클래스”의 프로토타입을 검색할 수 있습니다.

많은 브라우저는 생성자의 프로토타입 속성에서 파생된 객체 인스턴스에 __proto__ 속성을 구현합니다.

class Car {
  constructor(brand, color) {
    this.brand = brand;
    this.color = color;
  }

  drive() {
    console.log(`${this.brand}는 달립니다`);
  }
}

let hd = new car('hd', black);

Car.prototype.constructor === Car; // true
Car.prototype === hd.__proto__; // true
Car.prototype.sleep === hd.drive; // true

OOP 패턴으로 구현한 자동차 예시

프로토타입 속성

상속된 멤버는 프로토타입 속성에 정의됩니다.

물체. Object.prototype으로 시작하는 대신. 그렇기 때문에 시작하는

프로토타입 속성은 객체이기도 하며 프로토타입 체인 아래로 상속되는 속성 및 메서드를 포함하는 데 사용됩니다.

Object.prototype.watch(), Object.prototype.valueOf() 등은 Object.prototype을 상속받은 모든 객체와 생성자를 통해 새로 생성된 인스턴스에서 액세스할 수 있습니다.

Object.is() 및 Object.keys()와 같이 프로토타입에 정의되지 않은 멤버는 상속되지 않습니다.
이들은 Object() 생성자에서만 사용할 수 있는 멤버입니다.