자바 script 의 클래스 계승 을 다시 논 하 다.

1941 단어 상속
매개 변수 류 계승 이 없 는 문 제 는 먼저 예제 코드 를 보고 B 가 A:
 
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 의 확장 으로 쓰 여 늦게 발표 할 것 이다.

좋은 웹페이지 즐겨찾기