무언가를하기 전에 먼저 그 일을하는 이점에 대해 분명해야합니다. 나는 아무도 아무 이유없이 기꺼이 일을하지 않는다고 생각합니다. 일반적으로 클래스를 설계 할 때 실제로 코드 복제를 줄이기를 희망합니다. 상속을 사용하면 완벽하게 수행 할 수 있습니다. 상속 메커니즘의 도움으로 기존 클래스를 기반으로 다시 디자인하고 이미 가지고있는 다양한 방법을 최대한 활용하고 디자인을보다 쉽게 수정할 수 있습니다. 나는 말도 안되는 말을하지 않을 것입니다.
코드 사본은 다음과 같습니다.
기능인 (이름) {
this.name = 이름;
}
person.prototype.getName = function () {
이 this.name;
}
기능 블로거 (이름, 블로그) {
person.call (this, name);
this.blog = 블로그;
}
var bloger = new Bloger ( "Zhen", "// www.vevb.com");
Alert (bloger.name == "Zhenn"); /*ture로 돌아 가기*/
Alert (bloger.blog) /*tip//www.vevb.com*/
ALERT (bloger.getName () == "Zhenn"); /*팁 "bloger.getName은 함수가 아닙니다"*/
위의 예에서, 블로거는 내부의 통화를 통해 부모 클래스 사람의 기본 속성과 방법을 동적으로 호출한다는 것을 알 수 있습니다 (전화에 대한 설명은 //www.vevb.com/article/62086.htm)을 참조하십시오. 그러나 신중한 학생들은 개인 프로토 타입 객체의 방법을 통화에만 의존하여 상속받을 수 없으므로 "Bloger.getName이 기능이 아닙니다"라는 메시지가 표시됩니다. 그러나 걱정하지 마십시오. 위의 코드를 처리 하여이 문제를 해결하십시오!
코드 사본은 다음과 같습니다.
기능인 (이름) {
this.name = 이름;
}
person.prototype.getName = function () {
이 this.name;
}
기능 블로거 (이름, 블로그) {
person.call (this, name);
this.blog = 블로그;
}
/*다음 두 줄의 코드에 주목하십시오*/
bloger.prototype = new Person ();
bloger.prototype.constructor = Bloger;
var bloger = new Bloger ( "Zhen", "// www.vevb.com");
Alert (bloger.name == "Zhenn"); /*ture로 돌아 가기*/
Alert (bloger.blog) /*tip//www.vevb.com*/
ALERT (bloger.getName () == "Zhenn"); /* 프롬프트 진실*/
여기서 우리는이 두 줄의 코드를 설명해야합니다. 우리는 각 생성자가 프로토 타입 속성을 가지고 있으며,이 속성은 생성자의 프로토 타입 객체를 가리킨다는 것을 알고 있습니다. 실제로, 프로토 타입 객체는 인스턴스 객체이지만 프로토 타입 객체에 정의 된 속성 및 메소드는 공유 할 모든 인스턴스 개체에 제공 될 수 있습니다. 이것으로부터, 우리는 두 줄의 코드를 추가하려는 의도는 서브 클래스의 프로토 타입 객체를 부모 클래스의 인스턴스화 된 객체를 가리 키게하는 것이며, 상위 클래스의 인스턴스형 객체는 부모 클래스의 모든 프로토 타입 속성 메소드를 상속하여 목표를 달성합니다. 서브 클래스의 프로토 타입은 모든 상위 클래스 인스턴스 개체의 속성 및 메소드를 상속합니다.
그러나 Bloger.prototype.constructor = Bloger; 이 코드 라인은 서브 클래스 프로토 타입이 상위 클래스의 인스턴스로 설정되기 때문에 해당 생성자 속성이 상위 클래스를 가리키므로 서브 클래스 프로토 타입의 생성자를 서브 클래스를 다시 가리 키도록 설정해야합니다. 이 시점에서 JavaScript의 클래스 상속이 완벽하게 구현되었습니다!
서브 클래스의 선언을 단순화하기 위해 서브 클래스를 확장하는 전체 프로세스는 주어진 클래스 구조를 기반으로 새로운 클래스를 생성하는 Extend라는 함수로 작성 될 수 있습니다.
코드 사본은 다음과 같습니다.
함수 확장 (childclass, parentclass) {
var f = 새로운 함수 ();
f. prototype = parentclass.prototype;
childclass.prototype = new f ();
childclass.prototype.constructor = childclass;
}
이 확장 기능을 사용하면 서브 클래스를 쉽게 확장 할 수 있습니다. 이 기능을 호출하십시오. 위에 추가 된 두 줄의 코드 라인은 확장 (Bloger, Person)으로 변경 될 수 있으며, 이는 완전한 상속을 달성 할 수 있습니다!