JavaScript의 상속과 JavaScript의 상속은 기본 체인 기술을 사용합니다. 프로토 타입 .superclass = c.superclass = p.prototype;
var c = new c (), c .__ proto__ = C. prototype;
C를 방문하면 __proto__를 얻을 수없는 경우 C. prototype로 이동하여 부모의 부모에게서 찾을 수 있습니다. 다른 객체는 "멤버 변수"객체의 멤버가 수정 될 때 C. prototype의 "멤버 변수"가 액세스 할 수있는 경우 정의 중에 할당됩니다. 수정 된 것은 클래스 디자인의 원래 의도를 위반하는 모든 객체 인스턴스에서 공유합니다.
예를 들어:
다음과 같이 코드 코드를 복사하십시오.
'package '.j (function () {
'class a'.j (function () {
jpublic ({{{{
V : {a : 1}
});
jprivate ({{
P : {a : 1}
});
jprotect ({{
X : {a : 1}
});
});
'클래스 B는 a'.j (function () {를 확장합니다.
});
});
var b1 = 새로운 b ();
B1.VA = 5;
b1.xa = 5;
var b2 = 새로운 b ();
console.log (b1.va) // 출력 5
Console.log (b1.xa) // 5로 출력
Console.log (b2.va) // 출력도 5, 예상되지 않음 1
Console.log (b2.xa) // 1으로 출력합니다
console.log (b2.pa) // untable, 그것은 존재하지 않고 프롬프트 P
이 문제를 해결하는 방법?
A. "멤버 변수"(자체는 객체 자체)는 원래 체인에서 정의되지 않지만 현재 객체 인스턴스를 생성 할 때 객체에 할당됩니다. __proto__.
js ++는 jprivate에 정의 된 "멤버 변수"또는 "멤버 함수"가 exter __proto__에 할당되는 한 유사한 방법을 제공하며,이 인스턴스 만 사용할 수 있습니다.
B. "멤버 변수"는 프로토 타입 체인에서만 읽는 것만 읽습니다 (그 자체로 객체입니다).
C.jpublic에 의해 정의 된 "멤버 변수"(자체 자체)의 멤버는 단지 읽기 회원 만 읽지 말아야한다는 것을 기억하십시오. 그렇지 않으면 다양한 사례에서 공유됩니다.