也許我正在尋找的東西是不可能的,但這對我的需求來說非常方便
class Music extends Database {
static ref(id){return `musics/${id}`}
}
class Book extends Database {
static ref(id){return `books/${id}`}
}
class Database {
static fetch(id){
const data = request(Database.children.ref(id)) // <===== HERE of course the 'children' function doesn't exists
return new this(data)
}
}
Music.fetch(‘1234’)
?Book.fetch(‘9876’)
如何ref從fetch父中的靜態函式呼叫靜態函式?
這將避免在所有子類中復制 'fetch' 函式
如果這是一個反模式解決方案,我該怎么辦?
uj5u.com熱心網友回復:
關系正好相反:孩子可以參考他們的父母。
您可以在父級 ( Database) 中有一個通用靜態方法,子級只需使用適當的資料呼叫該方法:
class Database {
static fetch(data, type){
console.log(`requesting data: ${data} for type: ${type}`);
}
}
class Music extends Database {
static fetch(id){ return super.fetch(`musics/${id}`, "Music"); }
}
class Book extends Database {
static fetch(id){ return super.fetch(`musics/${id}`, "Book"); }
}
Music.fetch('1234')
Book.fetch('9876')
或者,父級仍然可以從 訪問資料this,因此您可以使用它來訪問子級:
class Database {
static fetch(data){
console.log(`requesting data: ${data} for type: ${this.myType}`);
}
}
class Music extends Database {
static myType = "Music";
static fetch(id){ return super.fetch(`musics/${id}`); }
}
class Book extends Database {
static myType = "Book";
static fetch(id){ return super.fetch(`musics/${id}`); }
}
Music.fetch('1234')
Book.fetch('9876')
您的代碼可以通過使用來完成this
顯示代碼片段
class Database {
static fetch(id){
console.log(`requesting data: ${this.ref(id)}`);
}
}
class Music extends Database {
static ref(id){return `musics/${id}`}
}
class Book extends Database {
static ref(id){return `books/${id}`}
}
Music.fetch('1234')
Book.fetch('9876')
但是,我建議不要這樣做。它讓繼承類的所有責任都相同,而不是將所有邏輯放在父類中,繼承類只做最少的作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/381352.html
標籤:javascript 班级 遗产 静止的 孩子们
上一篇:C#呼叫兩個介面相同的類
