如何从 javascript 中的 parent 调用 child 静态函数?
How to call a child static function from parent in javascript?
也许我正在寻找的东西是不可能的,但它会非常方便我的需要
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’)
如何从 parent 中的静态 fetch
函数调用静态 ref
函数?
这将避免在所有 children class
中复制 'fetch' 函数
如果这是 anti-pattern 解决方案,我该怎么办?
关系相反:children可以参考他们的parent.
您可以在父级 (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')
但是,我不建议这样做。它让继承 类 的所有责任以相同的方式工作,而不是将所有逻辑放在父级中,而继承 类 只做必要的最少工作。
也许我正在寻找的东西是不可能的,但它会非常方便我的需要
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’)
如何从 parent 中的静态 fetch
函数调用静态 ref
函数?
这将避免在所有 children class
中复制 'fetch' 函数如果这是 anti-pattern 解决方案,我该怎么办?
关系相反:children可以参考他们的parent.
您可以在父级 (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')
但是,我不建议这样做。它让继承 类 的所有责任以相同的方式工作,而不是将所有逻辑放在父级中,而继承 类 只做必要的最少工作。