Ich schreibe eine React-Komponente, die eine renderer
Eigenschaft übernimmt. Im Allgemeinen ist dies eine Funktion, die ein Objekt von Argumenten aufnimmt und eine andere React-Komponente zurückgibt. Ich möchte jedoch, dass Benutzer meiner Komponente stattdessen eine React-Komponentenklasse übergeben können. Ich würde dann intern diese Klasse in eine Funktion umwandeln:Wie kann ich feststellen, ob eine Funktion eine Klasse ist?
Natürlich ist eine Klasse in JavaScript auch eine Funktion. Wie kann ich überprüfen, ob renderer
eine Klasse ist? Ich benutze Babel 6.
Ich bin mir bewusst, dass ich einfach <renderer {...someArgs} />
zurückgeben könnte. Ich würde das lieber nicht tun, wenn ich es vermeiden könnte, weil das unnötig den Komponentenbaum aufbläht.
Was ist, wenn jemand eine Babel-kompilierte Version einer Klasse verwendet? Dann egal, was sie beide gerade "Funktion" an diesem Punkt sind. Sie würden besser zwei separate Parameter akzeptieren. – loganfsmyth
In jedem Fall sind sie Funktionen (d. H. "Typ der Sache ===" Funktion ""). Dies bedeutet jedoch nicht unbedingt, dass es keine Möglichkeit gibt, sie zu unterscheiden. Wenn es nachweislich keinen Weg gibt, dann wäre das eine Antwort. –
Nun, wenn die 'fn' eine Komponentenklasse war, dann sollte der 'fn.prototype' Basisklassen-Komponentenmethoden enthalten, so dass Sie die Existenz dieser Komponenten testen können. Wenn es sich nur um eine Factory-Funktion handelt, enthält der 'fn.prototype' nicht die Komponentenmethoden. – jfriend00