Ich lerne wie man OOP mit JavaScript macht . Verfügt es über ein Schnittstellenkonzept (wie das von Java interface
) ?
Ich könnte also einen Hörer erstellen...
Ich lerne wie man OOP mit JavaScript macht . Verfügt es über ein Schnittstellenkonzept (wie das von Java interface
) ?
Ich könnte also einen Hörer erstellen...
Es gibt keine nativen Schnittstellen in JavaScript, Es gibt mehrere Möglichkeiten, eine Schnittstelle zu simulieren. Ich habe ein Paket geschrieben, das dies tut
Sie können die Implantation sehen aquí
Dies ist eine alte Frage, aber dieses Thema beschäftigt mich immer wieder.
Da sich viele der Antworten hier und im Internet auf die "Durchsetzung" der Schnittstelle konzentrieren, möchte ich eine alternative Sichtweise vorschlagen:
Ich spüre das Fehlen von Schnittstellen am meisten, wenn ich mehrere Klassen verwende, die sich ähnlich verhalten (z. B. eine Schnittstelle implementieren ).
Ich habe zum Beispiel eine E-Mail-Generator der erwartet, dass er E-Mail-Abschnitte Fabriken die "wissen", wie man den Inhalt der Abschnitte und HTML generiert. Daher müssen sie alle über eine Art von getContent(id)
y getHtml(content)
Methoden.
Das Muster, das den Schnittstellen am nächsten kommt (auch wenn es immer noch ein Workaround ist), ist die Verwendung einer Klasse, die 2 Argumente erhält, die die 2 Schnittstellenmethoden definieren werden.
Die größte Herausforderung bei diesem Muster ist, dass die Methoden entweder static
oder um die Instanz selbst als Argument zu erhalten, um auf ihre Eigenschaften zuzugreifen. Es gibt jedoch Fälle, in denen ich diesen Kompromiss für lohnenswert halte.
class Filterable {
constructor(data, { filter, toString }) {
this.data = data;
this.filter = filter;
this.toString = toString;
// You can also enforce here an Iterable interface, for example,
// which feels much more natural than having an external check
}
}
const evenNumbersList = new Filterable(
[1, 2, 3, 4, 5, 6], {
filter: (lst) => {
const evenElements = lst.data.filter(x => x % 2 === 0);
lst.data = evenElements;
},
toString: lst => `< ${lst.data.toString()} >`,
}
);
console.log('The whole list: ', evenNumbersList.toString(evenNumbersList));
evenNumbersList.filter(evenNumbersList);
console.log('The filtered list: ', evenNumbersList.toString(evenNumbersList));
Javascript hat keine Schnittstellen. Aber es kann duck-typed werden, ein Beispiel finden Sie hier:
http://reinsbrain.blogspot.com/2008/10/interface-in-javascript.html
Ich weiß, dass dies ein altes Thema ist, aber ich habe in letzter Zeit festgestellt, dass ich mehr und mehr eine praktische API für die Überprüfung von Objekten gegen Schnittstellen benötige. Also habe ich dies geschrieben: https://github.com/tomhicks/methodical
Es ist auch über NPM verfügbar: npm install methodical
Im Grunde tut es alles, was oben vorgeschlagen wurde, mit einigen Optionen, um ein bisschen strenger zu sein, und alles, ohne eine Menge von if (typeof x.method === 'function')
Kesselstein.
Hoffentlich findet sie jemand nützlich.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.