다양한 상속 방법과 js의 장점과 단점 소개
이 글은 주로 JavaScript상속에 대한 심층적 이해의 다양한 방법과 장단점을 소개합니다. 관심 있는 친구들은 참고할 만한 가치가 있습니다.
앞서 작성
참고:
은 "JavaScript 심층객체 생성"과 동일하며 노트에 더 가깝습니다.
안녕, 다시 한 번 한숨을 쉬겠습니다. "JavaScript Advanced 프로그래밍"은 정말 잘 작성되었습니다!1. 프로토타입 체인 상속
function Parent () { this.name = 'kevin'; } Parent.prototype.getName = function () { console.log(this.name); } function Child () { } Child.prototype = new Parent(); var child1 = new Child(); console.log(child1.getName()) // kevin
속성을 참조합니다. 모든 인스턴스에 의해 공유됩니다. 예:
function Parent () { this.names = ['kevin', 'daisy']; } function Child () { } Child.prototype = new Parent(); var child1 = new Child(); child1.names.push('yayu'); console.log(child1.names); // ["kevin", "daisy", "yayu"] var child2 = new Child(); console.log(child2.names); // ["kevin", "daisy", "yayu"]
2. Child 인스턴스를 생성할 때 매개변수를 Parent에 전달할 수 없습니다. 2.
생성자(클래식 상속)function Parent () {
this.names = ['kevin', 'daisy'];
}
function Child () {
Parent.call(this);
}
var child1 = new Child();
child1.names.push('yayu');
console.log(child1.names); // ["kevin", "daisy", "yayu"]
var child2 = new Child();
console.log(child2.names); // ["kevin", "daisy"]
모든 인스턴스에서 참조 유형 속성을 공유하지 않음
2. 하위의 상위에 매개변수를 전달할 수 있습니다.
예:
function Parent (name) { this.name = name; } function Child (name) { Parent.call(this, name); } var child1 = new Child('kevin'); console.log(child1.name); // kevin var child2 = new Child('daisy'); console.log(child2.name); // daisy
단점:
메서드가 생성될 때마다 생성자에 정의됩니다. 인스턴스가 생성된 시간입니다.
3. 조합 상속
프로토타입 체인 상속과 클래식 상속은 두 개의 칼을 결합한 것입니다.
function Parent (name) { this.name = name; this.colors = ['red', 'blue', 'green']; } Parent.prototype.getName = function () { console.log(this.name) } function Child (name, age) { Parent.call(this, name); this.age = age; } Child.prototype = new Parent(); var child1 = new Child('kevin', '18'); child1.colors.push('black'); console.log(child1.name); // kevin console.log(child1.age); // 18 console.log(child1.colors); // ["red", "blue", "green", "black"] var child2 = new Child('daisy', '20'); console.log(child2.name); // daisy console.log(child2.age); // 20 console.log(child2.colors); // ["red", "blue", "green"]
장점: 프로토타입 체인 상속과 생성자의 장점을 결합한 것으로, JavaScript에서 가장 일반적으로 사용되는 상속 패턴입니다.
4. 프로토타입 상속function createObj(o) {
function F(){}
F.prototype = o;
return new F();
}
.create의 시뮬레이션된 구현으로, 수신 객체를 생성된 객체의 프로토타입으로 사용합니다. . 단점:
참조 유형이 포함된 속성 값은 항상 해당 값을 공유하며 이는 프로토타입 체인 상속과 동일합니다.
var person = { name: 'kevin', friends: ['daisy', 'kelly'] } var person1 = createObj(person); var person2 = createObj(person); person1.name = 'person1'; console.log(person2.name); // kevin person1.firends.push('taylor'); console.log(person2.friends); // ["daisy", "kelly", "taylor"]
참고:
값을 수정한 후에도 값이 변경되지 않은 이유는 person1.name
과 person2.name
가 독립적인 이름 값을 갖기 때문이 아니라 person1
때문입니다. .person2
프로토타입의 이름 값이 수정되는 것이 아니라 이름 값이 추가됩니다. person1.name = 'person1'
person1
상속 프로세스를 캡슐화하는 데만 사용되는 함수를 만듭니다. 이 함수는 마지막으로 객체를 내부적으로 향상시킵니다. 객체가 반환됩니다.
function createObj (o) { var clone = object.create(o); clone.sayName = function () { console.log('hi'); } return clone; }
단점: 차용된 생성자 패턴과 마찬가지로 객체가 생성될 때마다 메서드가 생성됩니다.
6. 기생 결합 상속
모두의 읽기 편의를 위해 결합 상속 코드는 여기에서 반복됩니다:
function Parent (name) { this.name = name; this.colors = ['red', 'blue', 'green']; } Parent.prototype.getName = function () { console.log(this.name) } function Child (name, age) { Parent.call(this, name); this.age = age; } Child.prototype = new Parent(); var child1 = new Child('kevin', '18'); console.log(child1)
Combined 상속 가장 큰 단점은 부모 생성자가 두 번 호출된다는 것입니다.
하위 유형 인스턴스의 프로토타입을 설정할 때 한 번:
Child.prototype = new Parent();
하위 유형 인스턴스를 만들 때 한 번:
var child1 = new Child('kevin', '18');
new의 시뮬레이션 구현을 기억하세요. 실제로 여기 문장에서, 다음을 실행합니다:
Parent.call(this, name);
여기서 Parent 생성자를 다시 호출합니다.
따라서 이 예에서 child1 객체를 인쇄하면 Child.prototype과 child1 모두 colors라는 속성이 있고 속성 값은 ['red', 'blue', ' 녹색'] .
그럼 이번에는 어떻게 계속 개선하고 반복 통화를 피할 수 있을까요?
Child.prototype = new Parent()를 사용하지 않고 Child.prototype이 Parent.prototype에 간접적으로 액세스하도록 허용하면 어떻게 되나요?
구현 방법을 살펴보겠습니다:
function Parent (name) { this.name = name; this.colors = ['red', 'blue', 'green']; } Parent.prototype.getName = function () { console.log(this.name) } function Child (name, age) { Parent.call(this, name); this.age = age; } // 关键的三步 var F = function () {}; F.prototype = Parent.prototype; Child.prototype = new F(); var child1 = new Child('kevin', '18'); console.log(child1);
마지막으로 이 상속 방법을 캡슐화해 보겠습니다.
function object(o) { function F() {} F.prototype = o; return new F(); } function prototype(child, parent) { var prototype = object(parent.prototype); prototype.constructor = child; child.prototype = prototype; } // 当我们使用的时候: prototype(Child, Parent);
"JavaScript Advanced 프로그래밍"에서 기생 조합 상속에 대한 칭찬을 인용하자면:
이 방법의 높은 효율성은 Parent 생성자를 한 번만 호출하므로 Parent.prototype에 불필요하고 중복되는 속성이 생성되는 것을 방지한다는 점을 반영합니다. 동시에 프로토타입 체인은 변경되지 않은 상태로 유지되므로, instanceof 및 isPrototypeOf는 계속해서 정상적으로 사용될 수 있습니다. 개발자는 일반적으로 기생 구성 상속이 참조 유형에 대한 가장 이상적인 상속 패러다임이라고 믿습니다.
【관련 추천】
1.
특별 추천: "php Programmer Toolbox" V0.1 버전 다운로드 2.
무료 js 온라인 동영상 튜토리얼php.cn Dugu Jiujian (3) - JavaScript 동영상 튜토리얼위 내용은 다양한 상속 방법과 js의 장점과 단점 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











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

얼굴 검출 및 인식 기술은 이미 상대적으로 성숙하고 널리 사용되는 기술입니다. 현재 가장 널리 사용되는 인터넷 응용 언어는 JS입니다. 웹 프런트엔드에서 얼굴 감지 및 인식을 구현하는 것은 백엔드 얼굴 인식에 비해 장점과 단점이 있습니다. 장점에는 네트워크 상호 작용 및 실시간 인식이 줄어 사용자 대기 시간이 크게 단축되고 사용자 경험이 향상된다는 단점이 있습니다. 모델 크기에 따라 제한되고 정확도도 제한됩니다. js를 사용하여 웹에서 얼굴 인식을 구현하는 방법은 무엇입니까? 웹에서 얼굴 인식을 구현하려면 JavaScript, HTML, CSS, WebRTC 등 관련 프로그래밍 언어 및 기술에 익숙해야 합니다. 동시에 관련 컴퓨터 비전 및 인공지능 기술도 마스터해야 합니다. 웹 측면의 디자인으로 인해 주목할 가치가 있습니다.

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

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

js와 vue의 관계: 1. 웹 개발의 초석인 JS 2. 프론트엔드 프레임워크로서의 Vue.js의 등장 3. JS와 Vue의 상호 보완적인 관계 4. JS와 Vue의 실제 적용 Vue.

다음 상황에서는 C++ 함수 상속을 사용하면 안 됩니다. 파생 클래스에 다른 구현이 필요한 경우 다른 구현을 사용하는 새 함수를 만들어야 합니다. 파생 클래스에 함수가 필요하지 않은 경우 빈 클래스로 선언하거나 구현되지 않은 전용 기본 클래스 멤버 함수를 사용하여 함수 상속을 비활성화해야 합니다. 함수에 상속이 필요하지 않은 경우 코드 재사용을 위해 다른 메커니즘(예: 템플릿)을 사용해야 합니다.

JS-Torch 소개 JS-Torch는 구문이 PyTorch와 매우 유사한 딥 러닝 JavaScript 라이브러리입니다. 여기에는 완전한 기능을 갖춘 텐서 객체(추적된 그라디언트와 함께 사용 가능), 딥 러닝 레이어 및 기능, 자동 미분 엔진이 포함되어 있습니다. JS-Torch는 JavaScript의 딥러닝 연구에 적합하며 딥러닝 개발을 가속화할 수 있는 다양한 편리한 도구와 기능을 제공합니다. Image PyTorch는 Meta 연구팀이 개발하고 유지 관리하는 오픈 소스 딥 러닝 프레임워크입니다. 신경망 모델을 구축하고 훈련하기 위한 풍부한 도구와 라이브러리 세트를 제공합니다. PyTorch는 간단하고 유연하며 사용하기 쉽게 설계되었으며 동적 계산 그래프 기능을 통해

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