(슈퍼 클래식) JavaScript의 객체 상속 방법 요약
이 기사는 JavaScript의 (매우 고전적인) 객체 상속 방법에 대한 요약을 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.
1. 프로토타입 체인 상속
핵심 사항: 프로토타입을 사용하여 하나의 참조 유형이 다른 참조 유형의 속성과 메서드를 상속하도록 합니다. 생성자, 프로토타입 및 인스턴스 간의 관계: 각 생성자에는 프로토타입 개체가 있고, 프로토타입 개체에는 생성자에 대한 포인터가 포함되어 있으며, 인스턴스에는 프로토타입 개체에 대한 내부 포인터가 포함되어 있습니다.
function SuperType(){ this.property = true; } SuperType.prototype.getSuperValue = function(){ return this.property; }; function SubType(){ this.subproperty = false; } // 继承自SuperType SubType.prototype = new SuperType(); SubType.prototype.getSubValue = function (){ return this.subproperty; }; var example = new SubType(); alert(example.getSuperValue());//true
프로토타입을 사용하여 객체를 생성하면 여러 인스턴스의 참조 유형에 대한 작업이 변조되는 문제가 발생합니다. 이 문제는 다음과 같이 위에도 존재합니다.
function SuperType(){ this.colors = ["red", "blue", "green"]; } function SubType(){}//即使没有写,也不会影响结果 SubType.prototype = new SuperType(); var example1 = new SubType(); example1.colors.push("black"); alert(example1.colors); //"red,blue,green,black" var example2 = new SubType(); alert(example.colors); //"red,blue,green,black"
두 인스턴스 객체 example1과 example2의 색상 속성은 다음을 가리킵니다. 동일한 지점에서 다른 인스턴스에 영향을 미치는 하나의 속성을 변경합니다.
단점:
① 프로토타입 체인 상속의 여러 인스턴스의 참조 유형 속성이 동일한 지점을 가리킵니다. 한 인스턴스가 프로토타입 속성을 수정하면 다른 인스턴스의 프로토타입 속성도 수정됩니다.
② 매개변수를 전달할 수 없습니다.
③ 단일 상속.
2. 생성자 상속 차용
핵심 사항: .call() 및 .apply()를 사용하여 부모 클래스 생성자를 자식 클래스 함수에 도입하고 부모 클래스의 생성자를 사용하여 자식 클래스 인스턴스를 향상시킵니다. 이는 상위 클래스를 복사하는 것과 동일합니다. 클래스의 인스턴스는 하위 클래스에 제공됩니다.
function SuperType(name){ this.name = name; this.colors = ["red", "blue", "green"]; } function SubType(name, age){ // 继承自SuperType SuperType.call(this, name); this.age = age; } var example1 = new SubType("Mike", 23); example1.colors.push("black"); alert(example1.colors);//"red,blue,green,black" var example2 = new SubType(); alert(example2.colors);//"red,blue,green" alert(example1.name); // "Mike" alert(example1.age); // 23
생성자 상속의 핵심은 SuperType.call(this, name)이 SuperType 생성자를 호출하는 방식으로 SubType의 각 인스턴스가 SuperType의 속성을 복사한다는 것입니다.
단점:
① 부모 클래스의 인스턴스 속성과 메서드만 상속할 수 있고 프로토타입 속성/메서드는 상속할 수 없습니다.
② 생성자의 재사용이 실현될 수 없으며 각 하위 클래스에는 부모 클래스 인스턴스 함수의 복사본이 있습니다. , 이는 성능과 코드에 영향을 미칩니다.
3. 조합 상속
핵심: 프로토타입 체인 상속과 생성자 상속 두 가지 모드의 장점을 결합하여 상위 클래스 생성자를 호출하여 상위 클래스의 속성을 상속하고 전달된 속성을 유지합니다. 그런 다음 상위 클래스 인스턴스를 하위 클래스의 프로토타입으로 사용하여 함수 재사용을 달성합니다.
그 뒤에 있는 아이디어는 프로토타입 체인을 사용하여 프로토타입 속성과 메서드의 상속을 실현하고 생성자를 빌려 인스턴스 속성의 상속을 실현하는 것입니다. 이러한 방식으로 함수 재사용은 메서드를 정의하여 달성됩니다. 프로토타입. 각 인스턴스에 고유한 속성이 있는지 확인합니다.
function SuperType(name){ this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function(){ alert(this.name); }; function SubType(name, age){ //继承属性 SuperType.call(this, name); this.age = age; } // 继承方法 SubType.prototype = new SuperType(); SubType.prototype.constructor = SubType; SubType.prototype.sayAge = function(){ alert(this.age); }; var example1 = new SubType("Mike", 23); example1.colors.push("black"); alert(example1.colors); //"red,blue,green,black" example1.sayName(); //"Mike"; example1.sayAge(); //23 var example2 = new SubType("Jack", 22); alert(example2.colors); //"red,blue,green" example2.sayName(); //"Jack"; example2.sayAge(); //22
부모 클래스의 인스턴스 속성과 메서드는 하위 클래스의 인스턴스와 하위 클래스의 프로토타입에 모두 존재하지만 메모리만 차지합니다. 따라서 하위 클래스를 사용하여 인스턴스 객체를 생성할 때 프로토타입에는
동일한 속성/메서드의 두 복사본이 있습니다. -------이 방법은 JavaScript에서 가장 일반적으로 사용되는 상속 패턴입니다.
4. 프로토타입 상속
핵심: 객체를 함수로 래핑한 다음 이 함수의 호출을 반환합니다. 이 함수는 마음대로 속성을 추가할 수 있는 인스턴스 또는 객체가 됩니다. 이것이 생성자의 프로토타입에 객체를 직접 할당하는 object.create()의 원리입니다.function object(obj){ function O(){} O.prototype = obj; return new O(); }
var person = { name: "Mike", friends: ["Jack", "Tom", "Joes"] }; var anotherPerson = object(person); anotherPerson.name = "Greg"; anotherPerson.friends.push("Peter"); var yetAnotherPerson = object(person); yetAnotherPerson.name = "Linda"; yetAnotherPerson.friends.push("BoBo"); alert(person.friends); //"Jack,Tom,Joes,Peter,BoBo"
var person = { name:"EvanChen", friends:["Shelby","Court","Van"]; }; var anotherPerson = Object.create(person); anotherPerson.name = "Greg"; anotherPerson.friends.push("Rob"); var yetAnotherPerson = Object.create(person); yetAnotherPerson.name = "Linda"; yetAnotherPerson.friends.push("Barbie"); console.log(person.friends);//"Shelby","Court","Van","Rob","Barbie"
① 프로토타입 체인에서 상속된 여러 인스턴스의 참조 유형 속성이 동일한 지점을 가리키며(모든 인스턴스가 프로토타입의 속성을 상속함) 변조 가능성이 있습니다.
② 매개변수를 전달할 수 없습니다. 재사용이 불가능합니다. (새 인스턴스 속성은 나중에 추가됩니다.)
5. 기생 상속
핵심: 내부적으로 객체를 향상시키는 상속 프로세스만 캡슐화하고 최종적으로 생성자를 반환하는 함수를 만듭니다. (프로토타입 상속 주위에 셸을 배치한 다음 반환하는 것과 같습니다.)function createAnother(original){ varclone=object(original); // 过调用函数创建一个新对象 clone.sayHi = function(){ // 以某种方式增强这个对象 alert("hi"); }; return clone; // 返回对象 }
var person = { name: "Nicholas", friends: ["Shelby", "Court", "Van"] }; var anotherPerson = createAnother(person); anotherPerson.sayHi(); //"hi"
① 프로토타입 체인이 상속한 여러 인스턴스의 참조 유형 속성이 동일한 지점을 가리키며 변조 가능성이 있습니다.
② 매개변수를 전달할 수 없고 프로토타입을 사용할 수 없으며 재사용할 수 없습니다. .
6. 기생 결합 상속
핵심 사항: 생성자를 빌려 매개변수 및 기생 모드를 전달하여 속성을 상속하고, 프로토타입 체인의 혼합 형식을 통해 메서드를 상속하고, 적용 또는 호출을 사용하여 함수에 다른 생성자를 도입할 수 있습니다. 양도됩니다.function inheritPrototype(subType, superType){ var prototype = Object.create(superType.prototype); //Object.create创建对象 prototype.constructor = subType; // 增强对象 subType.prototype = prototype; // 指定对象 } // 父类初始化实例属性和原型属性 function SuperType(name){ this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function(){ alert(this.name); }; // 借用构造函数传递增强子类实例属性(支持传参和避免篡改) function SubType(name, age){ SuperType.call(this, name); this.age = age; } // 将父类原型指向子类 inheritPrototype(SubType, SuperType); // 新增子类原型属性 SubType.prototype.sayAge = function(){ alert(this.age); } var example1 = new SubType("abc", 21); var example2 = new SubType("def", 22); example1.colors.push("pink"); // ["red", "blue", "green", "pink"] example1.colors.push("black"); // ["red", "blue", "green", "black"]
구현 과정이 상대적으로 번거롭습니다.
직접 상속할 수 있는데 왜 이런 상속 방법을 배워야 합니까? 주요 목적은 그들의 아이디어를 배우고 더 나은 기반을 마련하는 것입니다. 이는 향후 프레임워크의 소스 코드를 읽거나 구성 요소 또는 프레임워크를 직접 캡슐화하는 데 큰 도움이 될 것입니다.
바빠서 ES6 확장을 추가하지 않았습니다. 관련 추천:JavaScript_js 객체 지향에서 상속을 구현하는 세 가지 방법
위 내용은 (슈퍼 클래식) JavaScript의 객체 상속 방법 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 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)

뜨거운 주제











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

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

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

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

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.

JavaScript는 웹 개발에 널리 사용되는 프로그래밍 언어인 반면 WebSocket은 실시간 통신에 사용되는 네트워크 프로토콜입니다. 두 가지의 강력한 기능을 결합하면 효율적인 실시간 영상 처리 시스템을 만들 수 있습니다. 이 기사에서는 JavaScript와 WebSocket을 사용하여 이 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 첫째, 실시간 영상처리 시스템의 요구사항과 목표를 명확히 할 필요가 있다. 실시간 이미지 데이터를 수집할 수 있는 카메라 장치가 있다고 가정해 보겠습니다.
