Beispielsweise:

var fs = require('fs');
var currDir = fs.readdirSync('./lib');
console.log(currDir);

Dieser Code funktioniert wie erwartet korrekt. Aber ich kann nicht verstehen, wie die Funktion fs.readdirSync () aufgerufen werden kann, wenn das Objekt der Klasse fs nicht erstellt wurde.

var fsClass = require('fs');
var fs = new fsClass();
var currDir = fs.readdirSync('./lib');
console.log(currDir);

Wenn ich jedoch versuche, ein Objekt zu erstellen und die Funktion für diese Instanz aufzurufen, funktioniert der Code nicht. Fehlermeldung:

TypeError: fsClass is not a constructor
    at Object.<anonymous>

Danke!

0
fliptrail 17 Jän. 2019 im 22:13

3 Antworten

Beste Antwort

fs ist keine Klasse, sondern ein Objekt. Dieses Objekt wurde exportiert, sodass beim require alle definierten Funktionen verfügbar sind.

Schauen Sie sich den Code an: https://github.com/nodejs/node/blob/ 1375af204a30d1885b9e8bf79725cbd223707439 / lib / fs.js # L1796

Sie exportieren ein Objekt mit darin enthaltenen Funktionen.

Angenommen, Sie erstellen eine Klasse und nicht nur ein reguläres Objekt (d. H. {}), sondern können es als Klasse oder Objekt exportieren

module.exports = SomeClass 

Oder

modules.exports = new SomeClass();
0
Juan Tenorio 17 Jän. 2019 im 19:58

Sie müssen aufhören, an das klassische Vererbungsmodell zu denken, das mit Java, C # und verwandten Sprachen geliefert wird. In JavaScript gibt es keine "Klassen" wie diese Sprachen . Stattdessen wird ein Mechanismus verwendet, der auf Prototypen basiert. Selbst wenn ES2015 das Konzept der "Klasse" in JavaScript bringt, ist es nur Syntaxzucker für Konstruktorfunktionen.

Also, Respekt vor deiner Frage:

Nicht alles besteht notwendigerweise aus Klassen in JavaScript

Es gibt andere Strukturen und Typen wie object genau der Typ des fs Moduls. Sie sind nur Schlüssel- / Wertestrukturen zum Speichern von Daten.

-1
gugadev 17 Jän. 2019 im 20:38

Das fs Objekt wird bereits erstellt mit:

var fs = require('fs');

Das Modul fs exportiert ein bereits erstelltes Objekt. fs ist kein Konstruktor oder eine Klasse. Es ist ein bereits erstelltes Objekt, für das Sie seine Methoden direkt aufrufen können.

Ein Modul kann beliebig viele Dinge exportieren. Es kann ein Objekt exportieren, das bereits erstellt wurde und bereits Methoden enthält. Es kann eine Konstruktorfunktion exportieren, die zum Aufrufen eines Objekts aufgerufen wird. Es kann nur einen Wert exportieren. In diesem speziellen Fall exportiert das Modul fs ein bereits erstelltes Modul, auf das Sie die Methoden direkt aufrufen können. Sie müssen keinen separaten Konstruktor ausführen, um ein anderes Objekt zu erstellen.

1
jfriend00 17 Jän. 2019 im 19:22