如何从 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')

但是,我不建议这样做。它让继承 类 的所有责任以相同的方式工作,而不是将所有逻辑放在父级中,而继承 类 只做必要的最少工作。