웹 프론트엔드 JS 튜토리얼 js의 세 가지 상속 방법과 그 장점과 단점

js의 세 가지 상속 방법과 그 장점과 단점

Jun 29, 2017 am 11:03 AM
javascript 장점과 단점 방법

아래 편집자는 js의 세 가지 상속 방법과 그 장점과 단점에 대해 간략하게 설명합니다. 에디터가 꽤 괜찮다고 생각해서 지금 공유하고 참고용으로 보도록 하겠습니다. 첫 번째는 프로토타입 방법입니다.

//父类 
function person(){ 
  this.hair = 'black'; 
  this.eye = 'black'; 
  this.skin = 'yellow'; 
  this.view = function(){ 
    return this.hair + ',' + this.eye + ',' + this.skin; 
  } 
} 

//子类 
function man(){ 
  this.feature = ['beard','strong']; 
} 

man.prototype = new person(); 
var one = new man(); 

console.log(one.feature); //['beard','strong'] 
console.log(one.hair); //black 
console.log(one.eye); //black 
console.log(one.skin); //yellow 
console.log(one.view()); //black,black,yellow
로그인 후 복사
이 방법이 가장 간단합니다. , 하위 클래스의 프로토타입 속성 값을 상속된 인스턴스에 할당하기만 하면 상속된 클래스의 메서드를 직접 사용할 수 있습니다. prototype 속성은 무엇을 의미하나요? 프로토타입은 프로토타입입니다. (함수로 정의된) 모든 객체에는 객체 유형인 기본 프로토타입 속성이 있습니다.

그리고 이 기본 속성은 체인의 상향 검색을 구현하는 데 사용됩니다. 즉, 객체의 속성이 존재하지 않는 경우 프로토타입 속성이 속한 객체를 통해 속성을 찾는다는 의미입니다. 프로토타입을 찾을 수 없으면 어떻게 되나요?

js는 프로토타입의 프로토타입 속성이 속한 객체를 자동으로 검색하여 해당 속성이 발견되거나 프로토타입이 최종적으로 비어 있을 때까지("정의되지 않음"

) 프로토타입

index

을 통해 이동합니다. 예를 들어, 위의 예에서는 한 인스턴스의 one.view() 메서드에 대해 js는 먼저 한 인스턴스에 view() 메서드가 있는지 확인합니다. 왜냐하면 man.prototype 속성을 찾습니다. 그리고 프로토타입의 값은 person의 인스턴스입니다. 이 인스턴스에는 view() 메서드가 있으므로 호출이 성공합니다.

두 번째 적용 방법:

//父类 
function person(){ 
  this.hair = 'black'; 
  this.eye = 'black'; 
  this.skin = 'yellow'; 
  this.view = function(){ 
    return this.hair + ',' + this.eye + ',' + this.skin; 
  } 
} 

//子类 
function man(){ 
  // person.apply(this,new Array()); 
  person.apply(this,[]); 
  this.feature = ['beard','strong']; 
} 

var one = new man(); 

console.log(one.feature); //['beard','strong'] 
console.log(one.hair); //black 
console.log(one.eye); //black 
console.log(one.skin); //yellow 
console.log(one.view()); //black,black,yellow
로그인 후 복사
참고: 적용 매개변수가 비어 있는 경우, 즉 매개변수가 전달되지 않은 경우 new Array(), []를 통해 전달되며 null은 유효하지 않습니다.

세 번째 메소드인 call+prototype:

//父类 
function person(){ 
  this.hair = 'black'; 
  this.eye = 'black'; 
  this.skin = 'yellow'; 
  this.view = function(){ 
    return this.hair + ',' + this.eye + ',' + this.skin; 
  } 
} 

//子类 
function man(){ 
  // person.apply(this,new Array()); 
  person.call(this,[]); 
  this.feature = ['beard','strong']; 
} 

man.prototype = new person(); 
var one = new man(); 

console.log(one.feature); //['beard','strong'] 
console.log(one.hair); //black 
console.log(one.eye); //black 
console.log(one.skin); //yellow 
console.log(one.view()); //black,black,yellow
로그인 후 복사
call 메소드의 구현 메커니즘에는 man.prototype = new person();이 하나 더 필요합니다. 호출 메소드는 메소드 교체만 구현하고 객체 속성을 복사하지 않기 때문입니다. Google Map API의 상속은 이 방법을 사용합니다.


위에는 세 가지 상속 방법의 구현이 요약되어 있습니다. 그러나 각 방법에는 장단점이 있습니다.

상위 클래스가 다음과 같은 경우:

//父类 
function person(hair,eye,skin){ 
  this.hair = hair; 
  this.eye = eye; 
  this.skin = skin; 
  this.view = function(){ 
    return this.hair + ',' + this.eye + ',' + this.skin; 
  } 
}
로그인 후 복사
하위 클래스 남자가

객체 생성

동안 ​​상위 클래스 사람에게 매개변수를 전달할 수 있도록 하위 클래스를 어떻게 설계해야 합니까? 프로토타입의 상속 방법은 적용되지 않습니다.

Apply를 사용해야 합니다. 또는 호출 방법:

//apply方式 
//子类 
function man(hair,eye,skin){ 
  person.apply(this,[hair,eye,skin]); 
  this.feature = ['beard','strong']; 
} 
//call方式 
//子类 
function man(hair,eye,skin){ 
  person.call(this,hair,eye,skin); 
  this.feature = ['beard','strong']; 
}
로그인 후 복사
그런데 Apply 방법을 사용하는 데 여전히 단점이 있습니다. 이유는 무엇입니까? js에는 "instanceof"라는 매우 중요한 연산자
가 있습니다. 이 연산자는 객체가 특정 유형인지 비교하는 데 사용됩니다.

이 예에서는 man 유형 외에 하나의 인스턴스도 person 유형이어야 합니다. 그러나 apply 메소드에서 상속한 후에는 person 유형에 속하지 않습니다. 즉, ( one instanceof person)은 거짓입니다.
결국 가장 좋은 상속 방법은 호출+프로토타입 방법입니다. 그런 다음 (BaseClass 인스턴스 하나)의 값이 true인지 시험해 볼 수 있습니다.

세 번째 상속 방법에도 결함이 있습니다. 새 개체를 서브클래싱할 때 부모 클래스에 필요한 매개 변수를 전달해야 하며 부모 클래스의

속성 및 메서드
가 재현됩니다. 다음 상속 방법은 완벽합니다. :

function Person(name){   
  this.name = name; 
} 

Person.prototype.getName = function() { 
  return this.name; 
} 

function Chinese(name, nation) { 
  Person.call(this, name); 
  this.nation = nation; 
} 

//继承方法 
function inherit(subClass, superClass) { 
  function F() {} 
  F.prototype = superClass.prototype; 
  subClass.prototype = new F(); 
  subClass.prototype.constructor = subClass.constructor; 
} 

inherit(Chinese, Person); 

Chinese.prototype.getNation = function() { 
  return this.nation; 
}; 

var p = new Person('shijun'); 
var c = new Chinese("liyatang", "China"); 

console.log(p); // Person {name: "shijun", getName: function} 
console.log(c); // Chinese {name: "liyatang", nation: "China", constructor: function, getNation: function, getName: function} 


console.log(p.constructor); // function Person(name){} 
console.log(c.constructor); // function Chinese(){} 

console.log(c instanceof Chinese); // true 
console.log(c instanceof Person); // true
로그인 후 복사

위 내용은 js의 세 가지 상속 방법과 그 장점과 단점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 Dec 17, 2023 pm 02:54 PM

WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

시스템 구입 전 꼭 읽어야 할 내용: Win11과 Win10의 장단점 분석 시스템 구입 전 꼭 읽어야 할 내용: Win11과 Win10의 장단점 분석 Mar 28, 2024 pm 01:33 PM

오늘날의 정보화 시대에 개인용 컴퓨터는 우리 일상생활에 없어서는 안 될 도구로서 중요한 역할을 하고 있습니다. 컴퓨터의 핵심 소프트웨어 중 하나인 운영 체제는 사용 경험과 작업 효율성에 영향을 미칩니다. 시장에서는 Microsoft의 Windows 운영 체제가 항상 지배적인 위치를 차지해 왔으며 이제 사람들은 최신 Windows 11과 기존 Windows 10 중에서 선택해야 하는 상황에 직면해 있습니다. 일반 소비자의 경우 운영 체제를 선택할 때 버전 번호만 보는 것이 아니라 장점과 단점도 이해합니다.

템플릿의 장점과 단점은 무엇입니까? 템플릿의 장점과 단점은 무엇입니까? May 08, 2024 pm 03:51 PM

템플릿 작성: 장점과 단점 템플릿 작성은 재사용 가능한 코드 블록을 생성할 수 있는 강력한 프로그래밍 기술입니다. 이는 다양한 장점을 제공하지만 일부 단점도 제공합니다. 장점: 코드 재사용성: 템플릿을 사용하면 애플리케이션 전체에서 재사용할 수 있는 공통 코드를 생성하여 중복 및 유지 관리 노력을 줄일 수 있습니다. 일관성: 템플릿을 사용하면 코드 조각이 여러 위치에서 동일한 방식으로 구현되어 코드 일관성과 가독성이 향상됩니다. 유지 관리성: 템플릿에 대한 변경 사항은 이를 사용하는 모든 코드에 동시에 반영되므로 유지 관리 및 업데이트가 단순화됩니다. 효율성: 템플릿을 사용하면 동일한 코드를 반복해서 작성할 필요가 없으므로 시간과 노력이 절약됩니다. 유연성: 템플릿을 사용하면 다양한 애플리케이션 요구 사항에 쉽게 적용할 수 있는 구성 가능한 코드 블록을 만들 수 있습니다. 결점

WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 Dec 17, 2023 pm 05:30 PM

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

Java Servlet 작동 방식의 장점과 단점은 무엇입니까? Java Servlet 작동 방식의 장점과 단점은 무엇입니까? Apr 16, 2024 pm 03:18 PM

JavaServlet은 동적 웹 페이지를 구축하는 데 사용되는 Java 클래스이며 클라이언트와 서버 간의 브리지 역할을 합니다. 작동 원리: 요청 수신, 서블릿 초기화, 요청 처리, 응답 생성 및 서블릿 닫기. 장점: 휴대 가능하고 확장 가능하며 안전하고 사용하기 쉽습니다. 단점: 오버헤드, 결합 및 상태 관리. 실제 사례: "Hello, Servlet!"을 표시하는 간단한 서블릿을 만듭니다.

PHP 프레임워크의 장점과 단점 비교: 어느 것이 더 좋나요? PHP 프레임워크의 장점과 단점 비교: 어느 것이 더 좋나요? Jun 04, 2024 pm 03:36 PM

PHP 프레임워크의 선택은 프로젝트 요구 사항과 개발자 기술에 따라 다릅니다. Laravel: 기능이 풍부하고 커뮤니티가 활발하지만 학습 곡선이 가파르고 성능 오버헤드가 높습니다. CodeIgniter: 가볍고 확장하기 쉽지만 기능이 제한되고 문서가 적습니다. Symfony: 모듈식이며 강력한 커뮤니티이지만 복잡한 성능 문제가 있습니다. ZendFramework: 엔터프라이즈급이며 안정적이고 신뢰할 수 있지만 라이센스 비용이 크고 부피가 큽니다. 슬림(Slim): 마이크로 프레임워크로 빠르지만 기능이 제한되고 학습 곡선이 가파릅니다.

Java 변수 이름을 지정할 때 중국어를 사용할 때의 장점과 단점 Java 변수 이름을 지정할 때 중국어를 사용할 때의 장점과 단점 Feb 18, 2024 am 10:14 AM

Java 변수 이름 지정에 중국어 사용의 장점과 단점 Java 프로그래밍에서는 일반적으로 영어를 사용하여 변수, 메서드, 클래스와 같은 식별자 이름을 지정합니다. 그러나 때로는 식별자의 일부로 중국어를 사용하는 것도 고려할 수 있습니다. 이 기사에서는 중국어로 명명된 Java 변수를 사용할 때의 장점과 단점을 살펴보고 몇 가지 구체적인 코드 예제를 제공합니다. 장점 1: 코드 가독성 향상. 중국어로 명명된 Java 변수를 사용하면 코드를 더 쉽게 이해하고 읽을 수 있습니다. 결국 우리 뇌는 영어보다 중국어를 더 자연스럽고 유창하게 이해하고 인식합니다. 영어가 아닌 경우

JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축 JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축 Dec 17, 2023 pm 05:13 PM

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

See all articles