기존 프로토 타입 계층 구조가 있으며이를 수정하여 계층 구조가 그대로 유지되지만 추가 프로토 타입이 추가되도록 수정하려고합니다. instanceof
은 모든 프로토 타입에 대해 true를 반환해야합니다.instanceof가 작동하도록 기존 프로토 타입 체인에 기본 클래스 추가
I : B-> A라고하고 B-> A-> Base로 만들고 싶다고 말하십시오. 이제 instanceof
은 A, B, Base에 대해 true를 반환해야합니다.
B.prototype.prototype과 Object.setPrototypeOf()를 사용해 보았지만 어느 경우에도 운이 없었습니다. Object.setPrototypeOf()와
샘플 :
class A {
do() { console.log("do A"); }
}
class B extends A {
do() { console.log("do B"); }
doB() { console.log("what"); }
}
var a = new A();
var b = new B();
a.do();
b.do();
b.doB();
console.log(a instanceof A) // true
console.log(a instanceof B) // false
console.log(b instanceof A) // true
console.log(b instanceof B) // true
class Base {
doBase() { console.log("this is the base!"); }
}
// now add Base to B's chain, so that B -> A -> Base
// TODO: doesn't work!
Object.setPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(B)), Base.prototype)
//Object.setPrototypeOf(Object.getPrototypeOf(B), Base)
console.log(Object.getPrototypeOf(B))
console.log(Object.getPrototypeOf(Object.getPrototypeOf(B)))
var c = new B();
console.log(c instanceof B) // true
console.log(c instanceof A) // true
console.log(c instanceof Base) // false (!!! how to fix it?)
c.doBase(); // crash, not a function
어색해 보인다. 왜 그걸하고 싶니? 왜'Base'의 인스턴스를 만들어서'B'의 서브 클래스로 만들지 않겠습니까? 그것은 OO의 요점이 될 것입니다. – idmean
"* 계층 구조가 그대로 유지되도록 수정하고 싶습니다."- 불가능합니다. 'A'는 원래'Object'를 상속 받았고 이제'Base'를 상속해야합니까? 그건 "그대로"는 아닙니다. – Bergi
예, 정말 미친 것입니다. 그리고 내 선택이 아니야. 나는 ES6 클래스에서 사용할 수 있도록 이전 프레임 워크를 수정하려고합니다. 이 프레임 워크는 모든 사용자 구성 요소를 Component 기본 클래스로 확장하지만 프로토 타입을 덮어 쓰고 모든 원래 속성을 다시 복사하여이 작업을 수행합니다. 이제는 Component에서 상속 된 것처럼 보이므로 원래 클래스가 손실됩니다. 이제는 더 이상 인스턴스화 할 수 없습니다. 왜냐하면 바벨이 이제는 실패한'_classCallCheck'를 생성하기 때문입니다. – MiB