웹 프론트엔드 JS 튜토리얼 Javascript 프로그래밍_javascript 기술의 여러 상속 방법 비교 분석

Javascript 프로그래밍_javascript 기술의 여러 상속 방법 비교 분석

May 16, 2016 pm 03:29 PM
javascript 비교하다

이 기사에서는 Javascript 프로그래밍의 여러 상속 방법을 예제와 비교 ​​분석합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

오프닝

'엄격한' 의미에서 JavaScript는 진정한 객체 지향 언어가 아닙니다. 이렇게 말하는 이유는 일반적으로 약한 유형의 언어인 JavaScript는 Java나 C#과 같은 강한 언어의 상속 방식과 매우 다르기 때문에 기본적으로는 비주류 객체지향 방식이며, 거기에 일반적으로 책에서는 이를 '완전히 객체 지향적이지 않은' 언어라고 설명합니다. 사실 저는 개인적으로 메소드가 중요하지 않고, 객체지향적 사고를 가지고 있느냐가 중요하다고 생각합니다. 소통을 위해 이 글을 썼습니다.

상속 구현을 위해 자바스크립트를 사용해야 하는 이유

초기 PC 시스템의 성능은 정말 만족스럽지 않습니다. 모든 압력은 서버 측에 있었고 클라이언트 브라우저는 순전히 장식이었습니다. 당시 대중적인 테이블 레이아웃과 전화선 인터넷 액세스와 함께 웹 페이지 탐색이 매우 느렸습니다. 현재 인터넷 시대가 급속도로 발전하고 있으며 개인용 컴퓨터 하드웨어가 크게 향상되었으며 클라이언트 브라우저의 성능도 매우 실망스럽습니다. 웹 개발 모델도 조용히 변화하고 있습니다. 서버는 더 이상 이전처럼 "어려워지지" 않습니다. 대신 브라우저는 이러한 방식으로 각 클라이언트에 부담을 분산시켜야 합니다. 기업의 비용 절감은 웹 프런트엔드 개발을 더욱 흥미롭게 만듭니다. 점점 더 많은 프런트엔드 프레임워크가 등장하고 심지어 많은 프런트엔드 MVC 프레임워크도 등장했습니다. 이러한 맥락에서 JavaScript의 역할은 확실히 단순한 확인, 요청 전송, DOM 운영이 아니라 프런트 엔드 라우팅 및 비즈니스 계층과 같은 더 많은 역할을 수행해야 하며 JavaScript는 많은 논리적 작업을 수행해야 합니다. 이는 프런트엔드 데이터(예: 모델)의 추상화를 포함하고 객체 지향적 사고를 통해서만 추상화된 데이터를 잘 처리할 수 있으므로 여기서 상속은 매우 중요합니다.

간단한 요구사항으로 시작하세요

이제 프론트 데스크에서 name과 age라는 기본 속성을 가진 Person이라는 모델을 추출합니다. 기본적으로 모든 사람이 말할 수 있으므로 말하기 기능은 각 인스턴스의 프로토타입 객체에 배치되어 즐길 수 있습니다. 이제 Man의 경우 Person의 기본 속성을 상속하고 이를 기반으로 고유한 속성을 추가해야 합니다.

function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man() {
  //my own properties
}

로그인 후 복사

다음에서는 몇 가지 주류 상속 방법을 소개합니다.

1. 프로토타입 체인 상속

function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man() {
}
Man.prototype = new Person('pursue');
var man1 = new Man();
man1.say(); //hello, my name is pursue
var man2 = new Man();
console.log(man1.say === man2.say);//true
console.log(man1.name === man2.name);//true

로그인 후 복사

이 상속 방법은 매우 직접적입니다. Person의 모든 속성 메서드(인스턴스 및 프로토타입)를 얻기 위해 실제로는 상위 클래스의 인스턴스 new Person('pursue')을 하위 클래스의 프로토타입에 직접 할당합니다. , 하위 클래스 클래스 인스턴스 man1 및 man2 자체는 완전히 비어 있는 객체입니다. 모든 속성과 메서드는 프로토타입 체인에서 찾아야 하므로 발견된 속성과 메서드는 동일합니다.
따라서 프로토타입 체인 상속을 직접 사용하는 것은 비현실적입니다.

2. 생성자 상속을 사용하세요

function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man(name, age) {
  Person.apply(this, arguments);
}
//Man.prototype = new Person('pursue');
var man1 = new Man('joe');
var man2 = new Man('david');
console.log(man1.name === man2.name);//false
man1.say(); //say is not a function

로그인 후 복사

여기서 하위 클래스는 생성자에서 적용을 사용하여 상위 클래스의 생성자를 호출하므로 적어도 각 인스턴스를 직접 사용하는 것보다 상위 클래스의 속성을 상속하는 것보다 훨씬 낫습니다. 자체 공유 리소스가 있지만 이 메서드는 상위 클래스의 인스턴스 속성만 상속할 수 있으므로 say 메서드를 찾을 수 없습니다. 상위 클래스의 모든 속성과 메서드를 상속하려면 프로토타입 체인을 수정해야 합니다. 따라서 결합 상속 방법을 도입합니다.

3. 조합 상속

function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man(name, age) {
  Person.apply(this, arguments);
}
Man.prototype = new Person();
var man1 = new Man('joe');
var man2 = new Man('david');
console.log(man1.name === man2.name);//false
console.log(man1.say === man2.say);//true
man1.say(); //hello, my name is joe

로그인 후 복사

man1과 man2의 인스턴스 속성은 실제로 프로토타입 속성을 재정의하지만 프로토타입의 say 메서드를 재정의하지 않는다는 점에 유의해야 합니다. 따라서 여기서는 man1.say === man2입니다. .say는 여전히 true를 반환하므로 모든 인스턴스에 공통되는 프로토타입 속성을 재정의하지 않도록 주의하세요.

4. 기생 조합 상속

솔직히 다음 형식의 이름은 잘 모르겠지만, 실제로 가장 인기 있고 고전적인 JavaScript 상속 방법입니다. 실제로 프로토타입 객체의 구조만 이해하면 됩니다.

function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man(name, age) {
  Person.apply(this, arguments);
}
Man.prototype = Object.create(Person.prototype);//a.
Man.prototype.constructor = Man;//b.
var man1 = new Man('pursue');
var man2 = new Man('joe');
console.log(man1.say == man2.say);
console.log(man1.name == man2.name);

로그인 후 복사

사실 기생 조합 상속과 위 조합 상속의 유일한 차이점은 하위 클래스(a. 및 b.)의 프로토타입 객체를 구성하는 방법입니다. 여기서는 Object.creat(obj) 메서드가 사용됩니다. 들어오는 obj를 처리합니다. 객체는 다음과 유사하게 단순 복사됩니다.

function create(obj){
  function T(){};
  T.prototype = obj;
  return new T();
}

로그인 후 복사

따라서 a.는 일반적인 결합 상속(예: Man.prototype = new Person())처럼 하위 클래스의 프로토타입을 직접 복사하는 대신 하위 클래스의 프로토타입 객체를 상위 클래스의 프로토타입 객체와 잘 연결합니다. ;) 이것은 단지 매우 폭력적인 속성 덮어쓰기입니다. 기생 조합 상속 방법은 인스턴스 속성과 프로토타입 속성을 별도로 상속하므로 구현이 더 합리적입니다.

참고: 코드 b.는 instanceof의 결과를 변경하지 않지만 생성자가 필요한 시나리오에서는 더 엄격합니다.

이 기사가 JavaScript 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Xiaomi Mi 14 Pro에서 NFC 기능을 활성화하는 방법은 무엇입니까? Xiaomi Mi 14 Pro에서 NFC 기능을 활성화하는 방법은 무엇입니까? Mar 19, 2024 pm 02:28 PM

요즘 휴대폰의 성능과 기능은 점점 더 강력해지고 있습니다. 거의 모든 휴대폰에는 사용자의 모바일 결제 및 신원 인증을 용이하게 하는 편리한 NFC 기능이 탑재되어 있습니다. 그러나 일부 Xiaomi 14Pro 사용자는 NFC 기능을 활성화하는 방법을 모를 수 있습니다. 다음으로 자세히 소개해드리겠습니다. Xiaomi 14Pro에서 NFC 기능을 활성화하는 방법은 무엇입니까? 1단계: 휴대폰의 설정 메뉴를 엽니다. 2단계: "연결 및 공유" 또는 "무선 및 네트워크" 옵션을 찾아 클릭합니다. 3단계: 연결 및 공유 또는 무선 및 네트워크 메뉴에서 "NFC 및 결제"를 찾아 클릭합니다. 4단계: "NFC 스위치"를 찾아서 클릭하세요. 일반적으로 기본값은 꺼짐입니다. 5단계: NFC 스위치 페이지에서 스위치 버튼을 클릭하여 켜세요.

Huawei Pocket2에서 원격으로 TikTok을 사용하는 방법은 무엇입니까? Huawei Pocket2에서 원격으로 TikTok을 사용하는 방법은 무엇입니까? Mar 18, 2024 pm 03:00 PM

화면을 공중으로 밀어내는 것은 화웨이 메이트60 시리즈에서 높은 평가를 받는 화웨이의 기능이다. 이 기능은 휴대폰의 레이저 센서와 전면 카메라의 3D 깊이 카메라를 활용해 화면이 필요 없는 일련의 기능을 완성한다. 공중에서 TikTok을 스와이프하는 등 화면을 터치하는 기능이 있는데, Huawei Pocket 2를 사용하여 공중에서 TikTok을 스와이프하는 방법은 무엇인가요? Huawei Pocket2로 공중에서 스크린샷을 찍는 방법은 무엇입니까? 1. Huawei Pocket2의 설정을 엽니다. 2. 그런 다음 [접근성]을 선택합니다. 3. 클릭하여 [스마트 인식]을 엽니다. 4. [에어 스와이프 스크린], [에어 스크린샷], [에어 프레스] 스위치를 켜기만 하면 됩니다. 5. 사용 시 화면에서 20~40CM 거리를 두고 손바닥을 펴고 화면에 손바닥 아이콘이 나타날 때까지 기다려야 합니다.

iPhone 16 Pro CAD 도면이 공개되어 두 번째 새 버튼이 추가되었습니다. iPhone 16 Pro CAD 도면이 공개되어 두 번째 새 버튼이 추가되었습니다. Mar 09, 2024 pm 09:07 PM

아이폰16 프로의 CAD 파일이 노출됐는데, 디자인은 기존 루머와 일치한다. 지난해 가을 아이폰 15 프로에는 액션 버튼이 추가됐고, 올 가을 애플은 하드웨어 크기를 소폭 조정할 계획인 것으로 보인다. 캡처 버튼 추가 소문에 따르면 아이폰 16 프로는 두 번째 새 버튼을 추가할 수도 있는데, 이는 지난해에 이어 2년 연속 새 버튼이 추가되는 셈이다. 아이폰 16 프로에서는 새로운 캡처 버튼이 오른쪽 하단에 배치될 것이라는 소문이 돌고 있다. 이 디자인은 카메라 제어를 더욱 편리하게 하고 액션 버튼을 다른 기능에도 사용할 수 있게 할 것으로 예상된다. 이 버튼은 더 이상 일반 셔터 버튼이 아닙니다. 카메라에 관해서는 현재 iP에서

문서를 더 깔끔하게 만들기 위해 WPS Word에서 줄 간격을 설정하는 방법 문서를 더 깔끔하게 만들기 위해 WPS Word에서 줄 간격을 설정하는 방법 Mar 20, 2024 pm 04:30 PM

WPS는 당사에서 흔히 사용하는 사무용 소프트웨어입니다. 긴 글을 편집할 때 글꼴이 너무 작아서 선명하게 보이지 않는 경우가 많아 글꼴과 전체 문서가 조정됩니다. 예를 들어 문서의 줄 간격을 조정하면 문서 전체가 매우 명확해집니다. 오늘은 구체적인 작업 단계를 알려드리겠습니다. 와서 살펴보세요. 조정하려는 WPS 텍스트 파일을 열고 [시작] 메뉴에서 단락 설정 툴바를 찾으면 작은 줄 간격 설정 아이콘(그림에서 빨간색 원으로 표시)이 표시됩니다. 2. 줄 간격 설정 오른쪽 하단에 있는 작은 역삼각형을 클릭하면 해당 줄 간격 값이 나타납니다. 줄 간격의 1~3배를 선택할 수 있습니다(그림의 화살표 참조). 3. 또는 해당 단락을 마우스 오른쪽 버튼으로 클릭하면 나타납니다.

C언어와 PHP의 차이점과 비교분석 C언어와 PHP의 차이점과 비교분석 Mar 20, 2024 am 08:54 AM

C 언어와 PHP의 차이점 및 비교 분석 C 언어와 PHP는 모두 일반적인 프로그래밍 언어이지만 여러 측면에서 분명한 차이점이 있습니다. 이 기사에서는 C 언어와 PHP를 비교 분석하고 구체적인 코드 예제를 통해 이들 간의 차이점을 설명합니다. 1. 구문 및 사용법: C 언어: C 언어는 프로세스 지향 프로그래밍 언어로 주로 시스템 수준 프로그래밍 및 임베디드 개발에 사용됩니다. C 언어의 구문은 상대적으로 간단하고 저수준이며, 메모리를 직접 조작할 수 있고 효율적이고 유연합니다. C 언어는 프로그래머의 프로그램 완성도를 강조합니다.

Xiaomi Mi 14 Ultra AI 스마트 이미지 확장을 사용하는 방법은 무엇입니까? Xiaomi Mi 14 Ultra AI 스마트 이미지 확장을 사용하는 방법은 무엇입니까? Mar 16, 2024 pm 12:37 PM

시대의 진보로 인해 많은 사람들의 소득이 점점 더 높아지고 있으며, 그들이 일반적으로 사용하는 휴대폰은 자주 변경될 것입니다. Xiaomi가 최근 출시한 Xiaomi Mi 14 Ultra는 사용자에게 친숙할 것입니다. 사용자에게 더 많은 것을 제공할 수 있습니다. 편안하고 원활한 경험을 제공하기 위해 새로운 휴대폰은 필연적으로 사용되지 않는 많은 기능을 접하게 됩니다. 예를 들어 Xiaomi 14UltraAI 스마트 이미지 확장을 사용하는 방법은 무엇입니까? 아래의 사용법 튜토리얼을 살펴보세요! Xiaomi 14UltraAI 스마트 이미지 확장을 사용하는 방법은 무엇입니까? 먼저 Xiaomi 14Ultra를 열고 사진 앨범에 들어가서 확대하려는 사진을 선택한 다음 사진 앨범 편집 옵션에 들어갑니다. 자르기 회전을 클릭하고 자르기를 클릭한 다음 나타나는 선택 항목에서 스마트 확장을 클릭합니다. 마지막으로 필요에 따라 이미지를 확장하는 방법을 선택합니다.

PHP7.2와 5 버전의 장단점 비교 분석 PHP7.2와 5 버전의 장단점 비교 분석 Feb 27, 2024 am 10:51 AM

PHP7.2와 5의 장단점 비교 및 ​​분석. PHP는 매우 널리 사용되는 서버 측 스크립팅 언어이며 웹 개발에 널리 사용됩니다. 그러나 PHP는 변화하는 요구 사항을 충족하기 위해 다양한 버전으로 지속적으로 업데이트되고 개선되고 있습니다. 현재 PHP7.2는 최신 버전으로, 이전 PHP5 버전과 비교하여 주목할 만한 많은 차이점과 개선 사항이 있습니다. 이 기사에서는 PHP7.2와 PHP5 버전을 비교하고, 장점과 단점을 분석하고, 구체적인 코드 예제를 제공합니다. 1. 성능 PH

TrendX 연구소: Merlin Chain 프로젝트 분석 및 생태 목록 TrendX 연구소: Merlin Chain 프로젝트 분석 및 생태 목록 Mar 24, 2024 am 09:01 AM

3월 2일 통계에 따르면 비트코인의 2계층 네트워크 MerlinChain의 총 TVL은 미화 30억 달러에 도달했습니다. 이 중 비트코인 ​​생태자산은 15억9600만 달러 상당의 BTC, 4억400만 달러 상당의 BRC-20 자산 등 90.83%를 차지했다. 지난 달 MerlinChain의 총 TVL은 스테이킹 활동을 시작한 지 14일 만에 19억 7천만 달러에 이르렀으며, 이는 작년 11월에 출시된 Blast를 능가하며 가장 최근이자 똑같이 눈길을 사로잡습니다. 2월 26일, MerlinChain 생태계의 NFT 총 가치는 미화 4억 2천만 달러를 초과하여 이더리움 외에 NFT 시장 가치가 가장 높은 퍼블릭 체인 프로젝트가 되었습니다. 프로젝트 소개 MerlinChain은 OKX 지원입니다

See all articles