Wie man eine Referenz auf eine Klasse Funktion im ES6?
Sorry, wenn die Frage zu einfach ist, aber ich bin hier etwas fehlt.
Gerade eingeschaltet, ein ES5-Modul, das sah aus wie:
module.exports = {
func1: function(a, b) {...},
func2: function(a, b) {...}
};
Einem ES6-Klasse, die wie folgt aussieht:
export default class {
func1(a, b) {...}
func2(a, b) {...}
}
Und alles war gut: in beiden Fällen konnte ich export mod from 'module';
- und call - mod.func1(a, b)
und mod.func2(a, b)
.
Allerdings habe ich eine Funktion, erhält eine Modul-Funktion aufrufen:
var caller = function(func, val1, val2) {
let a = something(val1);
let b = something(val2);
return func(a, b);
};
Wenn ich rufe caller(mod.func1, x, y)
bekomme ich das gewünschte Ergebnis mit der ersten Umsetzung, sondern eine undefined is not a function
mit der zweiten.
Ausdrucken der Wert der mod.func1
zurück [Function]
in beiden Fällen aber eindeutig was anderes ist zurück von einem ES6-Klasse.
Was mache ich falsch, und wie kann ich eine Klasse Funktion, die ich anrufen kann in einer anderen Funktion?
Update: mit der zweiten Umsetzung, ich vergaß hinzuzufügen, die Instanziierung code:
import Mod from 'module';
var mod = new Mod();
- Ich bezweifle wirklich, dass
mod.func1(a, b)
arbeitet mit der exportierten Klasse. - Vergessen Sie die Instanziierung code jetzt Hinzugefügt. Danke.
- Hm, vorbei an der
mod.func1
Methode wie eine Funktion, um irgendwo anders erfordert, dass Sie sich mit derthis
Kontext, in callbacks problem, aber das sollte sich nicht ändern, beim Wechsel von einem Objekt zu einer Klasse eine Instanz entweder. Können Sie uns zeigen, den Körper Ihrer Funktion?
Du musst angemeldet sein, um einen Kommentar abzugeben.
ist die Abkürzung für:
Was Sie suchen, ist ein
static
- Methode an den Konstruktor, der das in ES{3,5} ist auf diese Weise getan:und in ES6 wird mit der
static
modifier:Können Sie jedoch kurzer hand Methoden selbst in einem Objekt, also mit einem normalen Objekt ist klarer im Allgemeinen Fall:
, Warum die nicht prototype-Methoden zur Verfügung, auf der Konstruktor?
Weil es nicht so in ES3 oder ES5:
Erstellen einer Instanz ist notwendig, um Zugriff auf die Methoden über den Prototyp.
class
ist einfach nur Zucker, warum der Unterschied in der Funktion der Zugänglichkeit?static
bei der definition einer Funktion.Warum Sie wechseln zu einem
class
konstruieren (das ist ein bisschen mehr als syntaktischen Zucker für einen Konstruktor und einen Prototyp mit den Methoden)? Es gibt keinen Grund, nicht zu verwenden, ein Objekt-literal, wie du vor hast - verwenden Sie Methode syntax auch:Exportieren ein Objekt mit "static" - Methoden, wäre es sinnvoller zu verwenden namens Exporte hier aber:
können Sie importieren, indem Sie
import * as mod from 'module'
wenn Sie wie zu verwendenmod
als namespace.