javascript 대상 을 대상 으로 새로운 연습 의 원형 계승

먼저 부모 클래스 의 실례 화 대상 을 만 든 다음,이 대상 을 하위 클래스 의 prototype 속성 에 부여 합 니 다.이렇게 되면 부계 의 모든 공유 실례 구성원 은 하위 클래스 에 의 해 상속 된다.또한 instanceof 연산 자로 판단 할 때 하위 클래스 의 실례 화 대상 은 하위 클래스 에 속 할 뿐만 아니 라 부모 클래스 에 도 속한다.그리고 하위 클래스 자 체 를 prototype 의 constructor 속성 에 할당 합 니 다.(메모:여기 값 을 부여 할 때()가 없습니다!)이 단 계 는 하위 클래스 의 실례 화 대상 의 constructor 속성 을 볼 때 하위 클래스 의 정 의 를 보 는 것 이지 부모 클래스 의 정의 가 아 닙 니 다.다음은 o.method 1()호출 결 과 를 통 해 하위 클래스 가 계승 한 공유 인 스 턴 스 방법 에서 개인 인 스 턴 스 필드 나 개인 인 스 턴 스 방법 을 호출 하면 호출 된 이러한 개인 인 스 턴 스 구성원 은 부모 클래스 에 속 합 니 다.마찬가지 로 o.method 2()호출 결 과 를 통 해 하위 클래스 에서 정 의 된 인 스 턴 스 방법 을 볼 수 있 습 니 다.만약 에 개인 인 스 턴 스 필드 나 개인 인 스 턴 스 방법 을 호출 하면 호출 된 이러한 개인 인 스 턴 스 구성원 은 하위 클래스 에 속 합 니 다.o.method()호출 결 과 를 통 해 우 리 는 부모 류 의 원형 에 정 의 된 방법 이 하위 클래스 에 의 해 계승 되 는 것 을 볼 수 있 습 니 다.o.method 3()호출 결 과 를 통 해 하위 클래스 에서 정의 하 는 인 스 턴 스 방법 은 부모 클래스 에서 정의 하 는 개인 인 스 턴 스 구성원 에 접근 할 수 없습니다.마지막 으로 subClass.staticMethod()호출 결 과 를 통 해 정적 구성원 은 계승 되 지 않 습 니 다.2.4 호출 상속 법 호출 상속 의 본질은 하위 클래스 의 구조 기 에서 부모 클래스 의 구조 기 방법 을 하위 클래스 의 실행 문맥 에서 집행 하 게 하 는 것 이다.부모 클래스 구조 기 방법 에 있어 this 방식 으로 조작 하 는 모든 내용 은 실제 적 으로 조작 하 는 하위 클래스 의 정례 화 대상 에 있 는 내용 이다.따라서 중복 코드 의 작성 을 줄 이기 위해 서다
 
function parentClass() {
// private field
var x = "I'm a parentClass field!";
// private method
function method1() {
alert(x);
alert("I'm a parentClass method!");
}
// public field
this.x = "I'm a parentClass object field!";
// public method
this.method1 = function() {
alert(x);
alert(this.x);
method1();
}
}
parentClass.prototype.method = function () {
alert("I'm a parentClass prototype method!");
}

parentClass.staticMethod = function () {
alert("I'm a parentClass static method!");
}

function subClass() {
// inherit
parentClass.call(this);

// private field
var x = "I'm a subClass field!";
// private method
function method2() {
alert(x);
alert("I'm a subClass method!");
}
// public field
this.x = "I'm a subClass object field!";
// public method
this.method2 = function() {
alert(x);
alert(this.x);
method2();
}
this.method3 = function() {
method1();
}
}

// test
var o = new subClass();

alert(o instanceof parentClass); // false
alert(o instanceof subClass); // true

alert(o.constructor); // function subClass() {...}

o.method1(); // I'm a parentClass field!
// I'm a subClass object field!
// I'm a parentClass field!
// I'm a parentClass method!
o.method2(); // I'm a subClass field!
// I'm a subClass object field!
// I'm a subClass field!
// I'm a subClass method!

o.method(); // Error!!!
o.method3(); // Error!!!
subClass.staticMethod(); // Error!!!
위의 이 예 는 상속 법 을 어떻게 활용 하여 계승 을 실현 하 는 지 잘 나 타 났 다.계승 을 호출 하 는 관건 은 한 단계 밖 에 없습니다.바로 하위 클래스 가 정 의 될 때 부모 클래스 의 call 방법 을 통 해 하위 클래스 의 this 지침 을 전달 하 는 것 입 니 다.하위 클래스 의 상하 문 에서 부모 클래스 방법 을 실행 합 니 다.이렇게 하면 부모 클래스 의 모든 부모 클래스 내부 에서 this 방식 으로 정 의 된 공유 인 스 턴 스 구성원 은 하위 클래스 에 의 해 계승 된다.instanceof 연산 자로 판단 할 때 하위 클래스 의 실례 화 대상 은 하위 클래스 에 만 속 하고 부모 클래스 에 속 하지 않 습 니 다.하위 클래스 의 실례 화 대상 의 constructor 속성 을 볼 때 하위 클래스 의 정 의 를 볼 수 있 습 니 다.부모 클래스 의 정의 가 아 닙 니 다.그 다음 에 o.method 1()과 o.method 2()를 호출 한 결 과 는 원형 계승 법의 호출 결과 와 같 고 설명 한 문제 도 똑 같 습 니 다.여 기 는 중복 되 지 않 습 니 다.o.method()호출 결 과 를 통 해 우 리 는 부모 클래스 의 원형 에 정 의 된 방법 이 하위 클래스 에 계승 되 지 않 는 다 는 것 을 알 수 있 습 니 다.o.method 3()호출 결 과 를 통 해 하위 클래스 에서 정의 하 는 인 스 턴 스 방법 역시 부모 클래스 에서 정의 하 는 개인 인 스 턴 스 구성원 에 접근 할 수 없습니다.마지막 으로 subClass.staticMethod()호출 결 과 를 통 해 정적 구성원 역시 계승 되 지 않 는 다 는 것 을 알 수 있 습 니 다.마지막 으로 이 예 에서 나타 나 지 않 은 것 은 바로 상속 법 을 호출 함으로써 다 상속 을 실현 할 수 있다 는 것 이다.즉,하나의 하위 클래스 는 여러 부모 클래스 에서 this 방식 으로 부모 클래스 내부 의 모든 공유 인 스 턴 스 구성원 을 정의 할 수 있다.약 한 유형의 언어 로 서 자바 script 은 풍부 한 다 형 성 을 제공 합 니 다.자바 script 의 다 형 성 은 다른 강 한 유형 이 대상 언어 를 대상 으로 비교 할 수 없 는 것 입 니 다.다 중 과부하 와 덮어 쓰기 먼저 과부하 와 덮어 쓰기 의 차 이 를 설명 합 니 다.다시 불 러 오 는 영 어 는 overload 이 고 덮어 쓰 는 영 어 는 override 입 니 다.인터넷 상에 서 대부분의 사람들 이 오 버 라 이 드 를 무 거 운 짐 으로 여 기 는 것 을 발견 한 것 은 옳지 않다.무 거 운 짐 과 덮어 쓰 는 것 은 차이 가 있다.다시 불 러 오 는 것 은 같은 이름 의 함수(함수 포함)나 방법 이 여러 가지 로 이 루어 질 수 있 음 을 주의 하 십시오.그들 은 매개 변수의 유형 과(또는)매개 변수의 개수 에 따라 식별 할 수 있 습 니 다.덮어 쓰기 란 하위 클래스 에서 부모 클래스 와 같은 이름 을 정의 할 수 있 고 매개 변수 유형 과 개수 도 같은 방법 을 정의 할 수 있다 는 뜻 이다.이러한 방법의 정 의 를 내 린 후 하위 클래스 의 실례 화 대상 에서 부모 클래스 에서 계승 하 는 이러한 동명 방법 은 숨겨 진다.javascript 에서 함 수 를 다시 불 러 오 는 매개 변 수 는 유형 이 없고 매개 변수 개수 도 임 의 입 니 다.예 를 들 어
 
function add(a, b) {
return a + b;
}
이러한 함 수 를 정의 할 수 있 지만 여러 개의 매개 변 수 를 가 져 올 수 있 습 니 다.물론 매개 변수 유형 도 임 의 입 니 다.오류 여부 에 대해 서 는 이 함수 에서 실 행 된 내용 으로 결 정 됩 니 다.자바 script 은 지정 한 매개 변수 개수 와 매개 변수 유형 에 따라 어떤 함수 가 호출 되 었 는 지 판단 하지 않 습 니 다.따라서 리 셋 방법 을 정의 하려 면 강 한 언어 처럼 해 서 는 안 된다.하지만 당신 은 여전히 무 거 운 짐 을 실 을 수 있 습 니 다.함수 의 arguments 속성 을 통 해예 를 들 어
 
function add() {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
그러면 당신 은 임의의 여러 매개 변수 덧셈 함수 의 재 부팅 을 실현 할 수 있 습 니 다.물론 함수 에서 instanceof 나 constructor 를 통 해 모든 매개 변수의 유형 을 판단 하여 다음 에 어떤 조작 을 수행 할 지 결정 하고 더욱 복잡 한 함수 나 방법 으로 다시 불 러 올 수 있 습 니 다.한 마디 로 하면 자바 script 의 재 부팅 은 함수 에서 사용자 가 arguments 라 는 속성 을 조작 하여 이 루어 집 니 다.덮어 쓰기 도 쉽다.예 를 들 어
 
function parentClass() {
this.method = function() {
alert("parentClass method");
}
}
function subClass() {
this.method = function() {
alert("subClass method");
}
}
subClass.prototype = new parentClass();
subClass.prototype.constructor = subClass;

var o = new subClass();
o.method();
이렇게 하면 하위 클래스 에서 정의 하 는 method 는 부모 클래스 에서 계승 하 는 method 방법 을 덮어 쓴다.이렇게 덮어 쓰 는 것 이 좋다 고 말 할 수 있 지만 자바 에 서 는 덮어 쓰 는 방법 에서 덮어 쓰 는 방법(부류 의 방법)을 사용 할 수 있 습 니 다.여기 서 어떻게 실현 합 니까?또한 쉽 고 자바 보다 유연 합 니 다.자바 에서 제한 합 니 다.덮어 쓰 는 방법 에서 만 슈퍼 를 사용 하여 덮어 쓰 는 방법 을 사용 할 수 있 습 니 다.우 리 는 이 점 을 실현 할 수 있 을 뿐만 아니 라,하위 클래스 의 모든 방법 에서 부모 클래스 에서 덮어 쓰 는 방법 을 호출 할 수 있다.아래 의 예 를 보면
 
function parentClass() {
this.method = function() {
alert("parentClass method");
}
}
function subClass() {
var method = this.method;
this.method = function() {
method.call(this);
alert("subClass method");
}
}
subClass.prototype = new parentClass();
subClass.prototype.constructor = subClass;

var o = new subClass();
o.method();
이렇게 간단 하 다 는 것 을 알 수 있 습 니 다.덮어 쓰 는 방법 을 정의 하기 전에 개인 변 수 를 정의 한 다음 에 부모 클래스 에서 정의 할 덮어 쓰 는 방법 을 부여 한 다음 에 우 리 는 뒤에서 계속 호출 할 수 있 습 니 다.그리고 이것 은 개인 적 인 것 이 고 하위 클래스 의 대상 에 대해 보이 지 않 습 니 다.이렇게 하면 다른 고급 언어 가 실현 하 는 커버 와 일치한다.마지막 으로 주의해 야 할 것 은 우리 가 덮어 쓰 는 방법 에서 이 방법 을 호출 할 때,실행 상하 문 을 this 로 변경 해 야 한 다 는 것 이다.(이 예 에서 필요 하지 않 지만)이 방법 을 직접 호출 하면 실행 상하 문 이 전역 대상 이 된다.

좋은 웹페이지 즐겨찾기