자바 script 의 클래스 계승 을 다시 논 하 다.
1941 단어 상속
function A() {
}
A.prototype.a1 = function() {
};
function B() {
}
B.prototype = new A();
B.prototype.b1 = function() {
};
var b = new B();
alert(b.constructor == A); // true
alert(b.constructor == B); // false
에 계승 되 는 것 을 실현 하 는 주요 문 제 는*A 를 B 의 원형 으로 예화 해 야 하 는데 이때 A 의 구조 함 수 를 실 행 했 습 니 다.그러나 대상 을 대상 으로 하 는 규칙 에 따라 B 를 예화 하기 전에 B 와 그 부류 A 의 구조 함 수 는 실행 해 서 는 안 된다.*B 의 prototype 을 변경 하여 b.constructor 는 B 가 아니 라 A 입 니 다.3 가지 계승 문제 가 있다 고 가정 하면 A 와 B 는 모두 두 개의 문자열 매개 변수 s1 과 s2 가 있다.A 에서 두 개의 문자열 의 총 길 이 를 계산 했다.B 는 s1,s2 를 매개 변수 로 A:
function A(s1, s2) {
this.totalLength = s1.length + s2.length;
}
A.prototype.a1 = function() {
};
function B(s1, s2) {
}
B.prototype = new A();
B.prototype.b1 = function() {
};
new B("ab", "123");
를 호출 한 것 을 볼 수 있다.이 코드 에서 s1 과 s2 를 A 로 전달 할 방법 이 없 으 며 실례 화 A 를 B 의 원형 으로 할 때 매개 변수 가 없다.그래서 이상 이 생 겼 다.
s1 is undefined
솔 루 션 s1 과 s2 의 역할 도 메 인 은 B 안에 만 있 고 이 를 A 에 전달 하려 면 B 에서 만 조작 할 수 있다.함수 의 apply 방법 을 통 해 이 루어 질 수 있다.
function B(s1, s2) {
A.apply(this, arguments);
alert(this.totalLength);
}
다음 문 제 는 A 의 방법 을 B 의 원형 에 어떻게 추가 하 느 냐 하 는 것 이다.이것 도 어렵 지 않 습 니 다.A.prototype 을 옮 겨 다 니 며 B.prototype 에 방법 을 복사 하면 됩 니 다.주의해 야 할 것 은 동명 의 방법 에 대해 자 연 스 럽 게 하위 클래스 우선(과부하)이기 때문에 덮어 쓸 수 없다 는 것 이다.
for (var m in A.prototype) {
if (!B.prototype[m]) { //
B.prototype[m] = A.prototype[m];
}
}
후 기 는 C\#,자바 등 고급 언어 가 모두 다 중 계승 을 버 렸 기 때문에 본 고 에서 논의 한 것 도 단일 계승 상황 일 뿐이다.한편,본 고 에서 말 한 계승 방법 은 jRaiser 의 확장 으로 쓰 여 늦게 발표 할 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JavaScript 클래스 및 상속자바스크립트는 이만큼 널리 사용되는 언어로는 의외로 이번과 같은 정보를 찾을 수 없거나 합니다. 상속은 프로토 타입 체인에 의해 이루어진다. 하지만, 구체적으로 Base라는 클래스를 Derived라는 클래스가 상속해...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.