답변:
프로토 타입 상속 은 객체 지향 코드 재사용 의 한 형태입니다 . Javascript는 프로토 타입 상속을 사용하는 유일한 [주류] 객체 지향 언어 중 하나입니다. 거의 모든 다른 객체 지향 언어는 고전적입니다.
에서 고전 상속 , 프로그래머는 객체를 정의하는 클래스를 작성합니다. 동일한 클래스에서 여러 객체를 인스턴스화 할 수 있으므로 프로그램의 여러 객체를 설명하는 코드가 한 곳에 있습니다. 그런 다음 클래스를 계층 구조로 구성하여 코드 재사용을 향상시킬 수 있습니다. 보다 일반적인 코드는 상위 수준 클래스에 저장되며 하위 수준 클래스는 상속됩니다. 이것은 객체가 부모 클래스뿐만 아니라 같은 클래스의 다른 객체와 코드를 공유한다는 것을 의미합니다.
에서 프로토 타입 상속 형태의 객체는 직접 상속 다른 개체에서. 수업에 관한 모든 사업은 사라집니다. 객체를 원한다면 객체를 작성하면됩니다. 그러나 코드 재사용은 여전히 가치있는 일이므로 객체를 계층 구조로 함께 연결할 수 있습니다. 자바 스크립트에서 모든 객체에는 객체를 만든 비밀 링크가있어 체인을 형성합니다. 객체가 가지고 있지 않은 속성을 요구할 때, 부모 객체는 속성이 발견 될 때까지 또는 루트 객체에 도달 할 때까지 지속적으로 체인 위로 요청됩니다.
JavaScript의 각 함수 (객체 자체)에는 실제로 "prototype"이라는 멤버가 있습니다.이 멤버는 객체를 요청할 때 값을 제공합니다. 이 멤버가 있으면 생성자 메커니즘 (객체가 함수로 구성되는)이 작동 할 수 있습니다. 함수 객체의 프로토 타입에 속성을 추가하면 생성 된 객체와 그로부터 상속 된 모든 객체에 속성을 사용할 수 있습니다.
장점
프로토 타입 상속이 유리한 코드 재사용 형식 인 이유에 대해서는 단단하고 빠른 규칙이 없을 수 있습니다. 코드 재사용 자체가 유리하며 프로토 타입 상속은 그에 대한 합리적인 방법입니다. 프로토 타입 상속은 상당히 간단한 코드 재사용 모델 이며이 코드는 직접적인 방식 으로 크게 재사용 될 수 있습니다 . 그러나 고전 언어는 확실히 이것을 달성 할 수 있습니다.
주석 : @Andrew Hedges 는 실제로 많은 프로토 타입 언어 가 있다는 점을 지적 합니다. 이러한 다른 것들이 존재한다는 사실은 주목할 가치가 있지만, 그들 중 어느 것도 주류에 가까운 것은 없다는 점도 주목할 가치가 있습니다. NewtonScript는 한동안 약간의 견인력이있는 것처럼 보였지만 플랫폼으로 죽었습니다. 프로토 타입 기능을 추가하는 방식으로 일부 현대 언어를 확장 할 수도 있습니다.
프로토 타입 기반 언어는 클래스와 객체를 구별하지 않고 단순히 객체를 갖습니다. 프로토 타입 기반 언어에는 프로토 타입 객체라는 개념이 있으며, 새로운 객체의 초기 속성을 가져 오는 템플릿으로 사용되는 객체입니다. 모든 객체는 객체를 만들거나 런타임에 고유 한 속성을 지정할 수 있습니다. 또한 모든 객체를 다른 객체의 프로토 타입으로 연결할 수 있으므로 두 번째 객체가 첫 번째 객체의 속성을 공유 할 수 있습니다.
장점 / 단점은 클래스 (정적 코드)를 정의 할 필요없이 런타임에 새로운 종류의 객체를 만들 수 있다는 것입니다. 대부분의 기능과 마찬가지로 장점 / 불이익으로 설정하는 것은 개발자의 책임입니다.
객체는 본질적으로 자바 스크립트에서 기능하기 때문에 가능합니다 (클로저도).
컴파일시 클래스 대신 런타임에 객체를 사용하여 새 객체를 작성하면 객체에 대한 세부 사항을 알지 않고도 객체를 확장 할 수 있습니다. 물론 사용법에 따라 매우 단점이 될 수 있습니다. 여기서는 언어에 대해 가정하지 않으므로 동적이 아닌 javascript 이외의 언어에 적용됩니다.
myobject.prototype=unkownobject;
myobject.newproperty=1;
거의 어디에서나 객체를 얻을 수 있습니다. 네트워크, 데이터베이스, 외부 연결 등의 고유 코드
언어는 자바 스크립트와 같은 프로토 타입 상속을 구현할 필요가 없습니다. 자바 스크립트에서 프로토 타입 객체는 단순히 공유되며 상속자 사이에서도 속성이 공유됩니다. 대안은 프로토 타입의 모든 속성을 새 객체로 복사하는 것입니다. 각 접근 방식은 상황에 따라 장점이 있습니다. 나는 두 번째를 더 좋아하지만 자바 스크립트가하는 것이 아닙니다.