자바스크립트의 객체지향과 상속에 대해 초보자가_javascript 기술을 배우는 데 도움이 됩니다.
JavaScript의 객체지향과 상속에 관한 글입니다. 저자가 1년 전에 쓴 글인데, JavaScript를 배우려는 학생들에게 많은 도움이 되기를 바랍니다. 내가 틀렸다면 정정해 주세요. 원본 링크 Javascript의 객체 및 상속
일부 Javascript 사용자는 프로토타입이나 객체 지향 언어의 본질에 대해 전혀 알 필요가 없지만, 전통적인 객체 지향 언어를 사용하는 개발자는 다음과 같은 경우 JavaScript에서 상속을 찾을 수 있습니다. 그들은 그것을 사용합니다. 모델은 매우 이상합니다. 다양한 JS 프레임워크는 클래스와 유사한 코드를 작성하기 위한 자체 메서드를 제공하므로 JS 객체 지향을 이해하기가 더욱 어렵습니다. 그 결과는 다음과 같습니다.
1. 객체 지향을 구현하는 표준 방법은 없습니다.
2. 객체지향 JS의 기본 개념은 사람들에게 잘 알려져 있지 않습니다
프로토타입 상속
프로토타입 상속은 매우 간단한 개념이며 그 본질은 다음과 같습니다. 🎜 >1. 객체 a는 객체 b로부터 상속받습니다. 이는 b가 a의 프로토타입임을 의미합니다.
2. a는 b의 모든 속성을 상속합니다. 즉, b의 값이 >존 스미스와 그로부터 상속받은 제인이 있다고 가정하여 구체적인 코드에서 그 효과를 살펴보겠습니다.
코드 복사
이제 john을 jane의 프로토타입이라고 부릅니다. jane은 john
코드 복사
에서 상속됩니다. 다음과 같이 Jane 자신의 속성이 더 높은 우선순위를 가집니다.
코드 복사
이후에 john에게 속성을 추가하면 아래와 같이 jane도 속성을 동적으로 상속받습니다.
코드 복사
의 새로운 추가 속성을 상속받습니다. 이제 Jane이 결혼하여 새로운 성(last name)
을 갖게 된다고 가정해 보겠습니다. 코드 복사
코드 복사
그러나 이제 jane의 성을 삭제하면
코드를 복사하세요
"Smith "
이제 jane은 다른 개체에서도 상속받을 수 있습니다. 이 체인에는 상속이 얼마든지 있을 수 있습니다. 실제로 John은 프로토타입 속성도 가지고 있습니다.
코드 복사
Firebug 콘솔에서 john.__proto__의 값은 Object{}로 설정되어 있지만 Object{}는 모든 객체의 상위 클래스인 Object.prototype 객체를 나타냅니다.
프로토타입 상속에 대한 간략한 설명입니다. 꽤 좋아 보이는데요, 그렇죠?
그러나 실제로는 __proto__를 사용할 수 없습니다. . .
그러나 이것이 __proto__ 속성이 존재하지 않는다는 의미는 아닙니다. __proto__ 속성은 일부 브라우저에서 직접 접근할 수 없지만 여전히 어떤 형태로 존재하며, 우리가 이를 처리해야 하지만 그리 직접적이지는 않습니다.
클래스와 상속
따라서 JavaScript에는 클래스가 없다고 말할 수 있습니다기억하세요: JavaScript에는 클래스가 없습니다이 경우 어떻게 되나요? 메서드와 상속으로 무엇을 달성했나요?
프로토타입 기준. 전통적인 객체 지향 언어에서 메소드는 클래스에 의존하지만 JavaScript에서는 메소드는 객체의 프로토타입에 의존하고 프로토타입은 객체의 생성자에 바인딩됩니다.
자바스크립트에서는 함수가 생성자 역할을 합니다. new 연산자를 사용하면 함수를 생성자로 사용할 수 있습니다. 아래 코드는 Cat 함수를 생성하는 것을 보여줍니다.
위 코드 Cat.prototype 객체
new 연산자를 사용하여 Cat 인스턴스를 생성할 수 있습니다
이제 Cat.prototype 객체는 new Cat()에 의해 생성된 객체의 프로토타입이 됩니다. 예:
이제 Cat.prototype 메서드를 추가합니다. 추가 후 해당 메서드는 가필드에서 액세스할 수 있습니다.
garfield.greet()
"야옹, 난 가필드야"
다른 Cat 인스턴스도 액세스할 수 있습니다.
그래서 JavaScript에서는 메소드가 객체의 프로토타입(prototype)에 따라 다릅니다.
garfield.greet();
"새로운 기능은 무엇인가요?"
그러나 이는 다른 객체에는 영향을 미치지 않습니다
코드 복사
따라서 JavaScript에서 메소드는 객체, 객체의 프로토타입 또는 객체의 상위 객체, 즉 프로토타입 체인의 모든 링크와 직접 연결될 수 있습니다. 이것이 상속이 구현되는 방식입니다.
보조 프로토타입 체인을 만들려면 먼저 다른 생성자를 만들어야 합니다. 이를 Animal이라고 부르는 것은 어떻습니까?
function Animal(){
}
다음으로 Cat.prototype의 프로토타입이 Animal 객체를 가리키도록 해야 Cat 인스턴스가 모든 Animal 메서드를 상속하게 됩니다. 따라서 Cat.prototype의 값을 다음과 같이 Animal의 인스턴스로 설정합니다.
Cat.prototype = new Animal();
또한 새 Cat.prototype에 실제로 Cat의 인스턴스임을 알려야 합니다.
Cat.prototype.constructor = Cat // Let `Cat.prototype`은 Cat
이 작업을 수행하는 목적이 주로 클래스 간의 계층적 관계를 위한 것이지만 일반적으로 이를 수행해야 합니다.
이제 Animal.prototype과 Cat.prototype에서 상속된 객체는 Animal 클래스에 속하므로 Cat의 모든 인스턴스도 Animal.prototype에서 간접적으로 상속됩니다. Animal.prototype에 새 메소드를 추가하면 Cat의 모든 인스턴스도 이 메소드에 액세스할 수 있습니다.
Animal.prototype.breed = function() {
console.log('새 동물 만들기!');
return new this.constructor();
var kitty = garfield.breed(); 새로운 동물!
위의 코드를 통해 상속을 얻었으니 간단합니다.
결론
JavaScript의 프로토타입 기반 상속은 이상하고 익숙해지는 데 시간이 좀 걸리지만 핵심 아이디어는 매우 간단합니다. 이러한 필수 개념을 진정으로 이해한다면 이러한 혼합 코드에서 JavaScript OO를 제어하는 데 자신감을 갖게 될 것입니다. (끝)^_^

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











함수 상속에서는 "기본 클래스 포인터" 및 "파생 클래스 포인터"를 사용하여 상속 메커니즘을 이해합니다. 기본 클래스 포인터가 파생 클래스 개체를 가리키는 경우 상향 변환이 수행되고 기본 클래스 멤버에만 액세스됩니다. 파생 클래스 포인터가 기본 클래스 개체를 가리키는 경우 하향 캐스팅이 수행되므로(안전하지 않음) 주의해서 사용해야 합니다.

상속 오류 디버깅 팁: 올바른 상속 관계를 확인하세요. 디버거를 사용하여 코드를 단계별로 실행하고 변수 값을 검사합니다. 가상 수정자를 올바르게 사용했는지 확인하세요. 숨겨진 상속으로 인해 발생하는 상속 다이아몬드 문제를 살펴봅니다. 추상 클래스에서 구현되지 않은 순수 가상 함수를 확인하세요.

Go 언어는 유형 정의 및 메소드 연관을 통해 객체 지향 프로그래밍을 지원합니다. 전통적인 상속을 지원하지 않지만 구성을 통해 구현됩니다. 인터페이스는 유형 간의 일관성을 제공하고 추상 메소드를 정의할 수 있도록 합니다. 실제 사례에서는 OOP를 사용하여 고객 운영 생성, 획득, 업데이트 및 삭제를 포함하여 고객 정보를 관리하는 방법을 보여줍니다.

상속과 다형성은 클래스 결합에 영향을 줍니다. 상속은 파생 클래스가 기본 클래스에 종속되기 때문에 결합을 증가시킵니다. 다형성은 객체가 가상 함수와 기본 클래스 포인터를 통해 일관된 방식으로 메시지에 응답할 수 있기 때문에 결합을 줄입니다. 모범 사례에는 상속을 적게 사용하고, 공용 인터페이스를 정의하고, 기본 클래스에 데이터 멤버를 추가하지 않고, 종속성 주입을 통해 클래스를 분리하는 것이 포함됩니다. 다형성과 종속성 주입을 사용하여 은행 계좌 애플리케이션에서 결합을 줄이는 방법을 보여주는 실제 예입니다.

C++ 함수 상속에 대한 자세한 설명: "is-a"와 "has-a" 사이의 관계를 마스터하세요. 함수 상속이란 무엇인가요? 함수 상속은 파생 클래스에 정의된 메서드를 기본 클래스에 정의된 메서드와 연결하는 C++의 기술입니다. 파생 클래스가 기본 클래스의 메서드에 액세스하고 재정의할 수 있도록 하여 기본 클래스의 기능을 확장합니다. "is-a" 및 "has-a" 관계 함수 상속에서 "is-a" 관계는 파생 클래스가 기본 클래스의 하위 유형, 즉 파생 클래스가 기본 클래스의 특성과 동작을 "상속"함을 의미합니다. 기본 클래스. "has-a" 관계는 파생 클래스에 기본 클래스 개체에 대한 참조 또는 포인터가 포함되어 있음을 의미합니다. 즉, 파생 클래스가 기본 클래스 개체를 "소유"합니다. 구문다음은 함수 상속을 구현하는 방법에 대한 구문입니다. classDerivedClass:pu

PHP의 OOP 모범 사례에는 명명 규칙, 인터페이스 및 추상 클래스, 상속 및 다형성, 종속성 주입이 포함됩니다. 실제 사례에는 웨어하우스 모드를 사용하여 데이터를 관리하고 전략 모드를 사용하여 정렬을 구현하는 것이 포함됩니다.

Go 언어는 객체 지향 프로그래밍, 구조체를 통한 객체 정의, 포인터 수신기를 사용한 메서드 정의, 인터페이스를 통한 다형성 구현을 지원합니다. 객체 지향 기능은 Go 언어에서 코드 재사용, 유지 관리 용이성 및 캡슐화를 제공하지만 클래스 및 상속 및 메서드 시그니처 캐스트에 대한 전통적인 개념이 부족하다는 제한 사항도 있습니다.

Golang(Go 언어)에는 전통적인 의미의 클래스 개념이 없지만, 클래스와 유사한 객체지향 기능을 구현할 수 있는 구조체라는 데이터 형식을 제공합니다. 이 기사에서는 구조를 사용하여 객체 지향 기능을 구현하는 방법을 설명하고 특정 코드 예제를 제공합니다. 구조의 정의와 사용법 먼저 구조의 정의와 사용법을 살펴보자. Golang에서는 type 키워드를 통해 구조를 정의한 다음 필요한 곳에 사용할 수 있습니다. 구조에는 속성이 포함될 수 있습니다.
