javascript - Flera klasser som har olika namn men som ärver samma klass
Jag har till exempel den här klassen:
abstract class MyClass {
abstract myProp: number;
constructor() {
// Some code
}
}
Så jag vill skapa flera klasser som utökar denna klass. Men jag vill inte upprepa det flera gånger eftersom jag kommer att ha många klasser. Så syftet är att varje klass har ett annat namn och myProp.
Till exempel:
class FirstClass extends MyClass {
myProp = 1;
constructor() {
super();
// Some code
}
}
class SecondClass extends MyClass {
myProp = 2;
constructor() {
super();
// Some code
}
}
Så jag vill generera dessa klasser (till exempel med en funktion) men problemet är att jag kommer att behöva använda new-nyckelordet. Så användningen för var och en av dessa klasser bör vara så här:
const myConst = new FirstClass();
const myConst2 = new SecondClass();
Jag hoppas att detta är vettigt. Jag vill bara inte upprepa varje klass eftersom den har ett annat namn och myProp.
Svar #1
Du kan skapa klasser genom en funktion som returnerar en anonym klass.
const createClass = ( prop: number ) => {
return class extends MyClass {
myProp: number;
constructor () {
super();
this.myProp = prop;
}
}
}
const FirstClass = createClass(1);
const x = new FirstClass();
console.log(x.myProp);
Eller kolla svaren på dessa frågor för idéer:
- ES6 Dynamiska klassnamn
- Skapa objekt från klassnamn i JavasScript ECMAScript 6
Svar #2
Om jag förstår ditt problem korrekt, kan du bara skicka variabeln som är annorlunda som ett argument i konstruktorn.
class MyClass {
myProp: number;
constructor(myProp: number) {
this.myProp = myProp
// Some code
}
}
Och sedan skapa de klassinstanser du vill ha.
const myConst = new MyClass(1);
const myConst2 = new MyClass(2);
Personligen skulle jag bara utöka en klass om jag vill lägga till några metoder eller egenskaper som inte delas. Eftersom myProp finns i båda klasserna är det förmodligen bättre att bara skicka värdet till konstruktorn.
