Узел.классы 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);
}
}


будет ли это правильно?



кроме того, как вы предоставляете этот класс другим файлам в моем проекте узла? И вы все еще сможете расширить этот класс, если вы используете его в отдельном файле?



Я надеюсь, что вы сможете ответить на эти вопросы :)

768   3  

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

    Ничего не найдено.