동적 원형 방식 으로 계승 체 제 를 보 여줄 수 없 는 것 에 대해 생각해 야 한다.
<script type="text/javascript">
function Polygon(iSides) {
this.sides = iSides;
if(typeof Polygon._initialized == "undefined") {
Polygon.prototype.getArea = function() {
return 0;
};
Polygon._initialized = true;
}
}
function Triangle(iBase,iHeight) {
Polygon.call(this,3);
this.base = iBase;
this.hei = iHeight;
if(typeof Triangle._initialized == "undefined") {
Triangle.prototype = new Polygon();
Triangle.prototype.getArea = function() {
return this.base * this.hei * 0.5;
};
Triangle._initialized = true;
}
}
var oTriangle1 = new Triangle(12,4);
alert(oTriangle1.sides);
//alert(oTriangle1.getArea());
// 。FireBug oTriangle1.getArea() function
</script>
이 코드 가 이상 하 다 고 생각 하기 시 작 했 는데 왜 실행 이 안 되 지?그래서 저 는 작가 의 서술 과 사 고 를 결합 하기 시 작 했 습 니 다.var anObject=new aFunction()형식 으로 대상 을 만 드 는 과정 은 실제로 3 단계 로 나 눌 수 있다 는 것 을 알 고 있 습 니 다.(1)새로운 대상 을 만 드 는 것(2)이 대상 에 내 장 된 prototype 대상 을 구조 함수 portotype 이 참조 하 는 그 원형 대상(3)은 이 대상 을 this 매개 변수 로 구조 함 수 를 호출 합 니 다.멤버 설정 등 초기 화 작업 을 마 쳤 습 니 다.(2)단 계 를 주의 하 십시오.원래
var oTriangle1 = new Triangle(12,4);
이 문장 을 실행 할 때 내부 에서 oTriangle 1.prototype=Triangle.prototype 을 실행 합 니 다.(물론,이때 Triangle.prototype 대상 자체 도 실제 속성 과 방법 이 없 었 습 니 다.그 다음 에 제(3)단계 까지 함수 체 를 실행 하고 처음으로
Triangle.prototype = new Polygon();
까지 실 행 했 습 니 다.그러나 이 문장 이 실 행 된 후에 oTriangle 1.prototype 은 더 이상 값 을 부여 할 수 없습니다.(즉,oTriangle 1.prototype=Triangle.prototype 을 실행 할 수 없습니다.)다음 프로그램 실행
Triangle.prototype.getArea = function() {
return this.base * this.hei * 0.5;
};
은 이미 늦 었 습 니 다.o Triangle 1.prototype 대상 은 이 방법 을 가지 고 있 지 않 습 니 다.이 방법 을 가 진 사람 은 방금 new Polygon()이 만 든 대상 일 수 밖 에 없어 서 프로그램의 마지막 줄 주석 결과 가 나 왔 습 니 다.하지만 그 다음 에 만 든 트라이앵글 대상 은 정상적으로 작 동 할 수 있 습 니 다.다음 코드 를 보십시오.코드
<script type="text/javascript">
function Polygon(iSides) {
this.sides = iSides;
if(typeof Polygon._initialized == "undefined") {
Polygon.prototype.getArea = function() {
return 0;
};
Polygon._initialized = true;
}
}
function Triangle(iBase,iHeight) {
Polygon.call(this,3);
this.base = iBase;
this.hei = iHeight;
if(typeof Triangle._initialized == "undefined") {
Triangle.prototype = new Polygon();
Triangle.prototype.getArea = function() {
return this.base * this.hei * 0.5;
};
Triangle._initialized = true;
}
}
var oTriangle1 = new Triangle(12,4);
alert(oTriangle1.sides);
//alert(oTriangle1.getArea());
// 。FireBug oTriangle1.getArea() function
var oTriangle2 = new Triangle(10,5);
alert(oTriangle2.sides);
// 。
alert(oTriangle2.getArea());
</script>
가 원인 에 대해 서 말하자면 제 가 앞에서 분석 한 것 입 니 다.이때 내부 에서 oTriangle 2.prototype=Triangle.prototype 을 실행 합 니 다.이 원형 대상 은 실제 속성 과 방법 이 있 는 대상 에 게 인용 되 었 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
javascript 혼합 구조 함수 와 원형 방식,동적 원형 방식우리 일상 JS 프로 그래 밍 에서 가장 자주 사용 하 는 방식 은 다음 과 같은 두 가지 가 있 습 니 다.1.혼 합 된 구조 함수 와 원형 방식(중점) 요약:새로운 대상 인 스 턴 스 car1 과 car2 를 만...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.