請考慮這樣的代碼:的JavaScript - 原型鏈
class a {
constructor() {
this.test = "test from a";
this.testA = "X";
}
mimi() {
console.log('aaaaaaaa', this.test, this.testA)
}
}
class b extends a {
constructor() {
super();
this.test = "test from b"
}
mimi() {
console.log('bbbbbbbb', this.test, this.testA)
}
}
class c extends b {
constructor() {
super();
this.test = "test from c"
}
mimi() {
console.log('cccccccc', this.test, this.testA)
}
meme() {
var test = kalreg.__proto__.__proto__;
test.mimi();
var test2 = kalreg.__proto__.__proto__.__proto__;
test2.mimi();
}
}
var kalreg = new c(); kalreg.mimi(); kalreg.meme();
我得到的輸出是:
cccccccc test from c X
bbbbbbbb undefined undefined
aaaaaaaa undefined undefined
我的目標邏輯讓我用「一個」爲最通用類,作爲小孩的「b」,作爲「b」的小孩的「c」。我想「Ç」擁有的「b」和「a」而是功能的一部分「一個」被覆蓋「b」所以唯一的辦法「Ç」所有方法和屬性可能有權訪問覆蓋的功能是使用原型鏈。 不幸的是,我的路行不通,因此問題是:
- 在
meme()
功能,如何避免kalreg.proto - 我已經告訴訪問原型的這樣的方式是邪惡和危險的代碼。 在我看來,輸出中應該沒有「未定義」,但是,有。 預期的輸出結果是:從B X從X
如何實現從C X
CCCCCCCC測試
BBBBBBBB測試
AAAAAAAA測試?
謝謝!
對象如何可能沒有this.test每個類是否在它們的構造函數中定義了this.test? – Kalreg
您可否詳細說明如何在'meme()'方法中使用'super'來完成OPs的目標。 – Adam
@亞當:完成,感謝您將它掛起,我的意思是回到那個並忘記。 :-) –