Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss
Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Funktion einer Klasse aufrufen als Variablen

1 view
Skip to first unread message

Jan Novak

unread,
Nov 3, 2023, 8:22:03 AM11/3/23
to
Hallo,

ich beisse mir die Zähne aus an diesem kleinen Beispiel (auch chatGPT
half nicht :-) )
Ich möchte eine Funktion einer Klasse aufrufen, wo sowohl der
Klassenname als auch die Funktion der Klasse als Variablen übergeben werden:

class MyTest {
myTest(data){
console.log("innerhalb MyTest.myTest");
console.log(data);
}
}

const className = "MyTest";
const methodName = "myTest";
const myInstance = new window[className]();
//Ich bekomme hier bereits :Uncaught TypeError: window[className] is not
a constructor

myInstance[methodName](data);


Ein manuelles
const myInstance = new MyTest();
myInstance.myTest("testdaten");
funktioniert

Jan

Jan Novak

unread,
Nov 3, 2023, 9:29:47 AM11/3/23
to
Am 03.11.23 um 14:24 schrieb Stefan Ram:
> Jan Novak <rep...@gmail.com> writes:
>> Ich möchte eine Funktion einer Klasse aufrufen, wo sowohl der
>> Klassenname als auch die Funktion der Klasse als Variablen
>> übergeben werden:
>
> Zeichenfolgen können natürlich mit "eval" ausgeführt werden.
> Dies gilt allerdings als nicht besonders elegant und potentiell
> unsicher, so daß es heute manchmal auch blockiert wird.
...
> eval( "new " + "MyTest" + "()." + "myTest" + "( \"Testdaten\" )" );

OK, das behalte ich mal als Plan Bin der Hinterhand.


> Die nächste Möglichkeit kommt ohne "eval" aus, aber sie verlangt
> dafür nun ein zusätzliches Objekt "{ MyTest: MyTest }".

Aber dieses wäre doch statisch? Das will ich ja auf jeden Fall umgehen.
Oder kann ich dieses Objekt auch mit den Werten aus den "className" und
"methodName" setzen?

Jan

Stefan Reuther

unread,
Nov 3, 2023, 1:48:05 PM11/3/23
to
Am 03.11.2023 um 13:22 schrieb Jan Novak:
>     class MyTest {
>         myTest(data){
>             console.log("innerhalb MyTest.myTest");
>             console.log(data);
>         }
>     }
>
>     const className = "MyTest";
>     const methodName = "myTest";
>     const myInstance = new window[className]();
> //Ich bekomme hier bereits :Uncaught TypeError: window[className] is not
> a constructor

Was ist denn `window[className]`? Ist deine Klasse überhaupt im
window-Objekt enthalten, oder liegt die nur in einem lokalen Scope?

Die Browserkonsole sagt zumindest: `new window["Array"]()` funktioniert.


Stefan
0 new messages