Узел.классы JS ES6 с require
так до сих пор, я создал классы и модули node.js следующим образом:
var fs = require('fs');
var animalModule = (function () {
/**
* Constructor initialize object
* @constructor
*/
var Animal = function (name) {
this.name = name;
};
Animal.prototype.print = function () {
console.log('Name is :'+ this.name);
};
return {
Animal: Animal
}
}());
module.exports = animalModule;
теперь с ES6, вы можете сделать "фактические" классы так же, как это:
class Animal{
constructor(name){
this.name = name ;
}
print(){
console.log('Name is :'+ this.name);
}
}
теперь, прежде всего, я люблю это :) но это вызывает вопрос. Как вы используете это в сочетании с node.js's структура модуля?
скажем, у вас есть класс, где вы хотите использовать модуль для демонстрации скажите, что вы хотите использовать fs
так вы создаете свой файл:
животные.js
var fs = require('fs');
class Animal{
constructor(name){
this.name = name ;
}
print(){
console.log('Name is :'+ this.name);
}
}
будет ли это правильно?
кроме того, как вы предоставляете этот класс другим файлам в моем проекте узла? И вы все еще сможете расширить этот класс, если вы используете его в отдельном файле?
Я надеюсь, что вы сможете ответить на эти вопросы :)
3 ответов:
Да, ваш пример будет работать нормально.
что касается разоблачения ваших классов, вы можете
exportкласс, как и все остальное:class Animal {...} module.exports = Animal;или короче:
module.exports = class Animal { };после импорта в другой модуль, то вы можете рассматривать его, как если бы он был определен в этом файле:
var Animal = require('./Animal'); class Cat extends Animal { ... }
просто обработайте имя класса ES6 так же, как вы бы обработали имя конструктора способом ES5. Они являются одним и тем же.
синтаксис ES6 - это просто синтаксический сахар и создает точно такой же базовый прототип, функцию конструктора и объекты.
Итак, в вашем примере ES6 с:
// animal.js class Animal { ... } var a = new Animal(); module.exports = {Animal: Animal};вы можете просто лечить
Animalкак конструктор вашего объекта (то же самое, что вы сделали бы в ES5). Вы можете экспортировать конструктор. Вы можете вызвать конструктор сnew Animal(). Все то же самое для его использования. Только синтаксис объявления. Есть даже ещеAnimal.prototypeвот и все ваши методы на нем. Способ ES6 действительно создает тот же результат кодирования, только с более красивым/приятным синтаксисом.
на стороне импорта это будет использоваться следующим образом:
const Animal = require('./animal.js').Animal; let a = new Animal();
эта схема экспортирует конструктор животных как
.Animalсвойство, которое позволяет экспортировать больше чем одна вещь из этого модуля.Если вам не нужно экспортировать более одной вещи, вы можете сделать это:
// animal.js class Animal { ... } module.exports = Animal;и затем импортировать его с:
const Animal = require('./animal.js'); let a = new Animal();
путь ES6 требовать
import. Вы можетеexportваш класс и импортировать его в другое место с помощьюimport { ClassName } from 'path/to/ClassName'синтаксис.import fs from 'fs'; export default class Animal { constructor(name){ this.name = name ; } print(){ console.log('Name is :'+ this.name); } } import Animal from 'path/to/Animal.js';
Comments