javascript - Använd require/new för att skapa ett nytt objekt i node.js
Jag har ett mycket enkelt nybörjarproblem med att använda node.js men jag verkar inte kunna få det att fungera korrekt.
Allt jag vill är att kunna skapa objekt med hjälp av 'new'-operatorn i index.js-filen. För demonstrationssyfte har jag skapat ett enkelt Person-objekt i en Person.js-fil (som ligger i samma katalog som min index.js) på detta sätt:
class Person {
constructor() {
this._name = 'bob';
}
set name(name) {
this._name = name
}
get name() {
return this._name;
}
}
Nu vill jag göra något liknande detta (i filen index.js):
var p = require('./Person.js')
var bob = new p.Person()
Felmeddelandet jag får säger att Person inte är en konstruktor:
var bob = new p.Person()
^
TypeError: p.Person is not a constructor
at Object.<anonymous> (/home/.../index.js:59:11)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3
All hjälp uppskattas mycket.
Svar #1
Om du vill kräva eller importera en klass/funktion/objekt/vad som helst från en annan JS-fil, måste du exportera det och importera/kräva det i din nuvarande fil. Dessa kallas moduler.
I ditt fall behöver du exportera Person-klassen efter att du har skapat den. Annars har JS ingen referens till den. Lägg till
module.exports = Person
nedanför Person-klassen. Nu kan du instansiera genom att
const Person = require('./person');
const p = new Person();
För de nya ES6-klasserna kan du också använda import/export.
// Export Person Class
export default class Person {
....
}
// Now, import
import Person from './person'
