export - / import-single-Klasse Methode unter Verwendung von ES6-Modulen?
Sagen wir, ich habe eine einfache Klasse, wie dies in fileA.js
:
class foo {
constructor(x) {
this.name = x
}
fooMethod(x) {
return x + 'hello';
}
}
Und ich will den import und die Nutzung fooMethod
im fileB.js
wie diese:
import { fooMethod } from './fileA';
class bar() {
...
barMethod(x) {
return fooMethod(x);
}
}
Wie würde ich schreiben, die export
im fileA
um dies zu erreichen?
export { foo.prototype.fooMethod as fooMethod }
arbeiten könnte.Wie wollen Sie es aufrufen?
Nein, dies würde den export der Klasse, nicht der bloßen Methode.
Aber als Lux hingewiesen hat, ist es wahrscheinlich besser zu finden, eine alternative Art der Strukturierung von (Prototyp-Methoden aufgerufen werden sollen auf etwas, das nicht auf Ihre eigenen).
Ich aktualisiert die Frage.
InformationsquelleAutor Rotareti | 2016-07-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würden Sie haben, um es zu exportieren, die auf dem Prototyp. Aber denken Sie daran, dass, wenn Sie das tun, werden Sie nicht rufen Sie die Funktion in der Klasse/Objekt-Kontext:
Aber ich würde Ihnen empfehlen, es nicht zu tun.
Okay, aufgrund Ihres Kommentars, den Sie wollen, ein guter Weg, um eine gemeinsame Funktionalität für zwei Klassen, die nicht verlängern, der gleichen Basis-Klasse. Eine einfache Möglichkeit ist das importieren der utility-Funktion, die aus zwei Klassen:
foo.js
ein.js
b.js
Dies ist ein gutes Muster und eignet sich gut für eine einzelne Funktion, hat aber Ihre Grenzen, wenn Sie sich bewerben möchten komplexere Funktionalität. Ein guter Weg dies zu erreichen ist eine Misch Muster:
foo.js
ein.js
b.js
Dadurch wird Ihr mischen, erstellen Sie eine neue anonyme Klasse, die zwischen Ihre Klasse 'A'/'B' und 'BaseA'/'BaseB', die die gemeinsame Funktion
foo
.fooMethod
imfileB
mit dem Zusammenhang von Klassefoo
ist das importieren der gesamtenfoo
Klasse, und rufen SiefooMethod
aus?Nun, würden Sie brauchen, ein Objekt zu haben, ein Zusammenhang, nicht eine Klasse. So müssten Sie zum initialisieren eines Objekts. Vielleicht erstellen Sie ein singleton?
Das mischen Muster sieht sehr interessant aus! Könnte ich eine Klasse erweitern, mit mehreren foo-wie Klassen, die auf diese Weise:
class A extends fooOne(fooTwo(Base))
?ja sicher!
InformationsquelleAutor Lux
Haben Sie, exportieren Sie es als eine separate variable/Konstante, wie diese:
Sehen Babel/repl
Bearbeiten
Es stellt sich heraus in den Anmerkungen, die Sie nicht wirklich brauchen, eine Instanz-Methode (die Sie nicht verwenden
this
). Ich würde nur die Definition und Verwendung einer regulären Funktion:InformationsquelleAutor Tamas Hegedus
Ist es besser, Sie nicht export-Methoden.
Folgen Sie dieser.
fileA
app.Komponente.ts
fooMethod
können statisch sein.InformationsquelleAutor Paulo Roberto Dalmas Junior