[javascript] Javascript가 프로토 타입 기반 언어라는 것은 무엇을 의미합니까?

Javascript의 주요 장점 중 하나는 프로토 타입 기반 언어라는 것입니다.

그러나 Javascript가 프로토 타입 기반이라는 것은 무엇을 의미하며, 이것이 왜 이점이 있습니까?



답변

프로토 타입 상속 은 객체 지향 코드 재사용 의 한 형태입니다 . Javascript는 프로토 타입 상속을 사용하는 유일한 [주류] 객체 지향 언어 중 하나입니다. 거의 모든 다른 객체 지향 언어는 고전적입니다.

에서 고전 상속 , 프로그래머는 객체를 정의하는 클래스를 작성합니다. 동일한 클래스에서 여러 객체를 인스턴스화 할 수 있으므로 프로그램의 여러 객체를 설명하는 코드가 한 곳에 있습니다. 그런 다음 클래스를 계층 구조로 구성하여 코드 재사용을 향상시킬 수 있습니다. 보다 일반적인 코드는 상위 수준 클래스에 저장되며 하위 수준 클래스는 상속됩니다. 이것은 객체가 부모 클래스뿐만 아니라 같은 클래스의 다른 객체와 코드를 공유한다는 것을 의미합니다.

에서 프로토 타입 상속 형태의 객체는 직접 상속 다른 개체에서. 수업에 관한 모든 사업은 사라집니다. 객체를 원한다면 객체를 작성하면됩니다. 그러나 코드 재사용은 여전히 ​​가치있는 일이므로 객체를 계층 구조로 함께 연결할 수 있습니다. 자바 스크립트에서 모든 객체에는 객체를 만든 비밀 링크가있어 체인을 형성합니다. 객체가 가지고 있지 않은 속성을 요구할 때, 부모 객체는 속성이 발견 될 때까지 또는 루트 객체에 도달 할 때까지 지속적으로 체인 위로 요청됩니다.

JavaScript의 각 함수 (객체 자체)에는 실제로 “prototype”이라는 멤버가 있습니다.이 멤버는 객체를 요청할 때 값을 제공합니다. 이 멤버가 있으면 생성자 메커니즘 (객체가 함수로 구성되는)이 작동 할 수 있습니다. 함수 객체의 프로토 타입에 속성을 추가하면 생성 된 객체와 그로부터 상속 된 모든 객체에 속성을 사용할 수 있습니다.

장점

프로토 타입 상속이 유리한 코드 재사용 형식 인 이유에 대해서는 단단하고 빠른 규칙이 없을 수 있습니다. 코드 재사용 자체가 유리하며 프로토 타입 상속은 그에 대한 합리적인 방법입니다. 프로토 타입 상속은 상당히 간단한 코드 재사용 모델 이며이 코드는 직접적인 방식 으로 크게 재사용 될 수 있습니다 . 그러나 고전 언어는 확실히 이것을 달성 할 수 있습니다.

주석 : @Andrew Hedges 는 실제로 많은 프로토 타입 언어 가 있다는 점을 지적 합니다. 이러한 다른 것들이 존재한다는 사실은 주목할 가치가 있지만, 그들 중 어느 것도 주류에 가까운 것은 없다는 점도 주목할 가치가 있습니다. NewtonScript는 한동안 약간의 견인력이있는 것처럼 보였지만 플랫폼으로 죽었습니다. 프로토 타입 기능을 추가하는 방식으로 일부 현대 언어를 확장 할 수도 있습니다.


답변

프로토 타입 기반 언어는 클래스와 객체를 구별하지 않고 단순히 객체를 갖습니다. 프로토 타입 기반 언어에는 프로토 타입 객체라는 개념이 있으며, 새로운 객체의 초기 속성을 가져 오는 템플릿으로 사용되는 객체입니다. 모든 객체는 객체를 만들거나 런타임에 고유 한 속성을 지정할 수 있습니다. 또한 모든 객체를 다른 객체의 프로토 타입으로 연결할 수 있으므로 두 번째 객체가 첫 번째 객체의 속성을 공유 할 수 있습니다.


답변

프로토 타입 기반 프로그래밍은 클래스가없는 객체 지향 프로그래밍 스타일이며 프로토 타입 역할을하는 기존 객체를 복제하여 동작 재사용 (또는 클래스 기반 언어의 상속)을 수행합니다.


답변

장점 / 단점은 클래스 (정적 코드)를 정의 할 필요없이 런타임에 새로운 종류의 객체를 만들 수 있다는 것입니다. 대부분의 기능과 마찬가지로 장점 / 불이익으로 설정하는 것은 개발자의 책임입니다.

객체는 본질적으로 자바 스크립트에서 기능하기 때문에 가능합니다 (클로저도).


답변

클래스 구조를 선언하는 대신 동일한 유형의 객체를 만들고 객체의 프로토 타입을 사용하여 언제든지 정의에 추가 할 수 있습니다. 일반적인 방법보다 유연합니다.


답변

컴파일시 클래스 대신 런타임에 객체를 사용하여 새 객체를 작성하면 객체에 대한 세부 사항을 알지 않고도 객체를 확장 할 수 있습니다. 물론 사용법에 따라 매우 단점이 될 수 있습니다. 여기서는 언어에 대해 가정하지 않으므로 동적이 아닌 javascript 이외의 언어에 적용됩니다.

myobject.prototype=unkownobject;
myobject.newproperty=1;

거의 어디에서나 객체를 얻을 수 있습니다. 네트워크, 데이터베이스, 외부 연결 등의 고유 코드

언어는 자바 스크립트와 같은 프로토 타입 상속을 구현할 필요가 없습니다. 자바 스크립트에서 프로토 타입 객체는 단순히 공유되며 상속자 사이에서도 속성이 공유됩니다. 대안은 프로토 타입의 모든 속성을 새 객체로 복사하는 것입니다. 각 접근 방식은 상황에 따라 장점이 있습니다. 나는 두 번째를 더 좋아하지만 자바 스크립트가하는 것이 아닙니다.


답변

모든 답변을 읽은 후 결론입니다.

1) 객체가 다른 객체로부터 직접 상속되는 상속

2) 클래스를 사용하지 않습니다

3) 인스턴스 기반 프로그래밍 또는 클래스리스 프로토 타입 지향 프로그래밍이라고도 함

4) 동작 재사용은 프로토 타입 역할을하는 기존 객체를 복제하여 수행됩니다.

5) 새로운 객체에서 템플릿으로 사용 된 객체는 초기 속성을 얻습니다.