자바스크립트가 객체지향 언어인지, 객체를 지원하는 언어인지에 대해서는 사람마다 각자의 의견이 있다고 생각합니다. Javascript의 충성스러운 팬들은 Javascript가 객체 지향 언어라고 말해야 합니다. 예를 들어, "Javascript의 왕의 귀환"이라는 책에서는 Javascript를 프로토타입 기반의 객체 지향으로 설명합니다. 제 개인적인 의견을 말씀드리겠습니다. 객체 지향, 상속, 다형성 및 캡슐화의 세 가지 특성 Javascript는 Java, C# 및 기타 객체 지향 언어만큼 구현 속도가 빠르지는 않지만 결국 여전히 특정 지원을 제공합니다. 따라서 Javascript는 객체지향 언어라고 말하는 것이 타당합니다. 그러나 상속의 관점에서 보면 일련의 상속 방법이 있지만 각각의 상속 방법은 진정한 객체지향 언어의 힘을 실현할 수 없습니다. 객체지향적이라고 합니다. 요약하자면, 저는 Javascript를 단순화된 객체 지향 또는 "의사" 객체 지향이라고 부르는 것을 선호합니다(이 의사 단어는 경멸적인 의미가 없습니다).
오늘은 객체지향의 첫 번째 특징인 상속에 대해 이야기해보겠습니다.
상속이란 무엇입니까? 나는 이것에 대해 말도 안되는 이야기를하고 싶지 않습니다. 이것은 가장 단순하고 전형적인 상속 체인입니다.
C#과 같은 객체지향 언어에서는 쉽습니다.
그러면 Javascript에는 구현을 제공하는 클래스나 상속이 없습니다. 어떻게 해야 할까요?
객체 위장(구성 상속 방식)
객체 위장이란? 이해하기 쉽도록 구조적 상속이라고 부를 수도 있습니다. 이름에서 알 수 있듯이 생성자를 사용하여 상속을 수행합니다. 실제로는 상위 클래스의 생성자를 일반적인 메소드로 간주하여 하위 클래스의 생성자에서 실행된다는 의미입니다. 이 경우 객체를 생성할 때 하위 클래스의 객체도 당연히 해당 클래스의 메소드를 생성할 수 있습니다. 학부모 수업!
그래도 위의 예를 사용하면 코드는 다음과 같습니다.
코드 복사
결과는 다음과 같습니다.
아
ㄴ.
c.
디.
e.
f.
테스트 성공!
이 코드의 핵심을 요약하자면, 상위 클래스를 지정하고 상위 클래스 객체를 선언한 후 임시 변수를 삭제하는 것이 번거로우신가요? 적어도 내 생각에는 삭제하는 것을 잊어버리더라도 상위 클래스가 수정될 위험을 감수해야 합니다. 이를 위해 호출 및 적용을 사용하여 이를 개선합니다!
다음 코드를 살펴보겠습니다. 여전히 위의 예입니다(모든 사람이 쉽게 이해할 수 있도록 요구 사항이 변경되었습니다. 동물에는 이름이 있습니다).
초심자라면 다음 두 코드가 무엇이고 적용이 무엇인지 조금 헷갈릴 수 있습니다. 글쎄요, 상속을 다루는 주제에 대해 보충 시리즈를 추가했습니다. 이 내용을 이해하지 못하신다면 제 기사인 "메소드 사용: 호출 및 적용"을 읽어보세요.
객체 위장은 상속을 달성하는 방법일 뿐입니다. 다음 글에서는 계속해서 다른 상속 방법과 여러 상속 방법의 장단점에 대해 글을 쓰겠습니다.