객체지향 프로그래밍을 구현할 때 상속은 매우 중요한 수단입니다. 과도한 상속을 하지 말고, 상속 대신 합성을 사용한다고 말하지만, 상속은 언제나 불가피하다. 여기서 논의하고 싶은 것은 Javascript의 상속 메커니즘입니다.
자바스크립트에는 실제로 상속 개념이 없지만 어떤 방법을 통해 모방할 수 있습니다. 이러한 종류의 상속은 실제로 한 개체를 다른 개체에 복사합니다. 주로 보안상의 이유로 모든 로컬 클래스와 호스트 클래스를 기본 클래스로 상속할 수 없다는 점에 유의해야 합니다.
Javascript에는 대략 세 가지 유형의 상속이 있습니다. 1. 객체 가장, 2. 프로토타입 상속, 3. 두 가지의 혼합.
1. 객체 사칭
사실 객체 가장은 this 키워드와 밀접한 관련이 있습니다(그래서 Javascript에서 this 키워드를 완전히 이해하는 것이 매우 중요합니다 :P). 생성자는 이를 이용해 속성과 메소드에 값을 할당하고, 생성자도 일반 함수로 간주할 수 있으므로 우리 베이스 클래스의 생성자를 서브 클래스의 생성자로 만든 후 서브 클래스 함수 내에서 이를 호출하면 됩니다. , 그러면 하위 클래스는 상위 클래스의 속성과 메서드를 가져옵니다.
원리는 매우 간단한데 어떻게 구현할까요? 아래는 실제 동작에 대한 코드 예시입니다.
객체 가장 구현 방법 1, 새 객체를 생성하는 데 가장 일반적으로 사용되는 방법:
var classA = 함수(이름){
this.name = 이름;
this.alertName = 함수(){
경고(this.name);
}
}
var classB = 함수(이름,나이){
this.myConstructor = classA;
this.myConstructor(이름);
this.myConstructor를 삭제하세요.
this.age = 나이;
this.alertAge = 함수(){
경고(이.나이);
}
}
위의 방법이 맞는지 확인하기 위해 아래 테스트 코드를 작성해 보겠습니다.
var objA = new classA('DK');
objA.alertName();//DK
var objB = new classB('DS',20);
objB.alertName();//DS
objB.alertAge();//20
이것이 소위 객체 가장입니다. 또한 객체 가장을 구현하는 방법에는 두 가지가 있지만 구현 방법은 다르지만 원칙은 동일합니다.
객체 가장 구현 방법 2, 호출 방법 사용:
var classA = 함수(이름){
this.name = 이름;
this.alertName = 함수(){
경고(this.name);
}
}
var classB = 함수(이름,나이){
classA.call(this,name);
this.age = 나이;
this.alertAge = 함수(){
경고(이.나이);
}
}
첫 번째 방법에서는 상위 클래스를 가리키는 새 함수 포인터를 생성하고 해당 함수를 호출한 다음 포인터를 삭제합니다. 여기서는 동일한 목적을 달성하기 위해 호출 메소드를 사용하여 이 객체 아래에서 상위 클래스의 생성자를 실행합니다. 또한 call 방식의 반대말은 apply 방식이다.
객체 가장 구현 방법 3 , 적용 방법 사용:
var classA = 함수(이름){
this.name = 이름;
this.alertName = 함수(){
경고(this.name);
}
}
var classB = 함수(이름,나이){
classA.apply(this,new 배열(이름));
this.age = 나이;
this.alertAge = 함수(){
경고(이.나이);
}
}
실제로 전달된 매개변수가 약간 다르다는 점을 제외하면 적용 방법은 호출 방법과 매우 유사하다는 것을 알 수 있습니다.
2. 프로토타입 상속
모든 사람은 프로토타입 객체에 대해 알아야 합니다. 프로토타입 객체의 모든 속성과 메서드는 클래스의 모든 인스턴스에 전달되므로 상위 클래스의 모든 속성과 메서드를 하위 클래스의 프로토타입 객체에 지불합니다. , 즉 그것은 우리의 상속을 실현하는 것과 같습니다.
하위 클래스가 상위 클래스의 모든 속성과 메서드를 얻으려면 상위 클래스의 인스턴스를 하위 클래스의 프로토타입 객체에 직접 지불합니다. 그러면 하위 클래스는 상위 클래스의 모든 객체와 메서드를 얻는 것과 같습니다. 부모 클래스?
코드 샘플 서비스:
var classA = 함수(){
this.name = 'DK';
this.alertName = 함수(){
경고(this.name);
}
}
var classB = 함수(이름,나이){
this.name = 이름;
this.age = 나이;
}
classB.prototype = new classA();
classB.prototype.alertAge = 함수(){
경고(이.나이);
}
여기서 상위 클래스의 생성자는 매개변수가 없는지 확인해야 합니다. 생성 매개변수가 있더라도 프로토타입 상속을 구현할 때는 =.=!
을 전달할 수 없기 때문입니다.3. 혼합 상속
이름에서 알 수 있듯이 혼합 상속은 처음 두 가지 방법이 혼합된 것입니다.
var classA = 함수(이름){
this.name = 이름;
}
classA.prototype.alertName = 함수(){
경고(this.name);
}
var classB = 함수(이름,나이){
classA.call(this,name);
this.age = 나이;
}
classB.prototype = new classA();
classB.prototype.alertAge = 함수(){
경고(이.나이);
}
객체 가장을 사용하여 매개변수를 상위 클래스에 전달하고 프로토타입 상속을 사용하여 공개 메서드를 상속합니다.
이제 세 가지 상속 방법에 대해 이야기했으니 이제 문제에 대해 이야기할 차례입니다.
객체 가장과 프로토타입 상속이 왜 있는지 궁금할 수도 있지만 여전히 하이브리드 상속도 있습니다. 가장 중요한 것은 바로 이 문제입니다.
1. 실제로 테스트해 보면 객체 가장을 통한 상속을 통해 하위 클래스가 상위 클래스의 프로토타입 체인에 있는 메서드에 액세스할 수 없음을 알 수 있습니다.
2. 프로토타입 상속을 사용하면 모든 속성이 공유 속성으로 전환됩니다. 동일한 하위 클래스의 두 인스턴스를 구현하면 모든 인스턴스가 모든 속성을 공유합니다.
3. 하지만 이는 확실히 부적절합니다. 따라서 하위 클래스가 상위 클래스 프로토타입 체인의 메서드에 액세스할 수 있도록 허용하면서 속성을 비공개로 유지하는 하이브리드 상속이 있습니다.
직접 시도해 볼 수 있습니다. 객체가 상속된 척하면 하위 클래스는 상위 클래스의 프로토타입 체인 메서드에 액세스할 수 없습니다. 프로토타입 체인 상속 하위 클래스의 모든 인스턴스는 모든 상위 클래스 속성을 공유합니다. 여기서는 예시를 쓰지 않겠습니다.

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

本篇文章整理了20+Vue面试题分享给大家,同时附上答案解析。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

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

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

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
