상속 소개
JS의 상속은 매우 복잡한 주제로, 다른 객체지향 언어의 상속보다 훨씬 더 복잡합니다. 대부분의 다른 객체 지향 언어에서는 클래스에서 상속하려면 키워드가 하나만 필요합니다. JS에서 public 멤버를 상속한다는 목적을 달성하기 위해서는 일련의 조치가 필요합니다. JS는 프로토타입 상속에 속합니다. 이러한 유연성 덕분에 표준 클래스 기반 상속이나 보다 미묘한 프로토타입 상속을 사용할 수 있습니다. JS에서는 모든 상속이 프로토타입을 통해 수행되고 JS는 객체를 기반으로 상속된다는 점을 분명히 해야 합니다.
상속됨:
function Animal(name){ this.name = name; this.showName = function(){ alert(this.name); } } function Cat(name){ Animal.call(this, name); } var cat = new Cat("Black Cat"); cat.showName();
Animal.call(this)은 다음을 사용함을 의미합니다. 이 개체 대신 Animal 개체가 있으면 Cat은 Animal의 모든 속성과 메서드를 갖게 됩니다. Cat 개체는 Animal의 메서드와 속성을 직접 호출할 수 있습니다.
다중 상속:
function Class10() { this.showSub = function(a,b) { alert(a-b); } } function Class11() { this.showAdd = function(a,b) { alert(a+b); } } function Class2() { Class10.call(this); Class11.call(this); }
매우 간단합니다. 두 번의 호출을 사용하여 다중 상속을 달성합니다.
물론 js 상속 다른 방법도 있습니다 , 프로토타입 체인을 사용하는 것과 같은 내용은 이 기사의 범위에 포함되지 않습니다. 여기서는 호출의 사용법만 설명합니다. 호출과 적용에 대해 말하면 이 두 메서드는 기본적으로 동일한 의미입니다. 차이점은 호출의 두 번째 매개 변수는 모든 유형이 될 수 있지만 적용의 두 번째 매개 변수는 배열 또는 인수여야 한다는 것입니다.
자바스크립트에서 단순상속을 구현하는 방법을 소개해드릴까요?
다음 예에서는 Person으로부터 프로토타입 프로토타입의 모든 속성을 상속하는 직원 클래스 Employee를 생성합니다.
function Employee(name, sex, employeeID) { this.name = name; this.sex = sex; this.employeeID = employeeID; } // 将Employee的原型指向Person的一个实例 // 因为Person的实例可以调用Person原型中的方法, 所以Employee的实例也可以调用Person原型中的所有属性。 Employee.prototype = new Person(); Employee.prototype.getEmployeeID = function() { return this.employeeID; }; var zhang = new Employee("ZhangSan", "man", ""); console.log(zhang.getName()); // "ZhangSan
위의 상속 구현은 매우 거칠고 문제가 많습니다.
Employee 생성자와 프로토타입을 생성할 때(이하 클래스라고 함), Person이 인스턴스화되어 부적절합니다.
Employee의 생성자는 상위 클래스 Person의 생성자를 호출할 수 없으므로 Employee 생성자에 name 및 sex 속성이 반복적으로 할당됩니다.
Employee의 함수는 Person의 동일한 이름의 함수를 덮어쓰며 오버로딩 메커니즘이 없습니다(이전 문제와 동일한 유형의 문제입니다).
JavaScript 클래스를 생성하는 구문은 너무 단편적이고 C#/Java의 구문만큼 우아하지 않습니다.
구현시 생성자 속성에 포인팅 오류가 있습니다.
위 내용은 JavaScript 및 기타 Inheritance_javascript 기법에서의 상속 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!