Jadi sampai saat ini, saya telah membuat kelas dan modul node.js
dengan cara sebagai berikut:
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;
Sekarang dengan ES6, Anda dapat membuat kelas "sebenarnya" seperti ini:
class Animal{
constructor(name){
this.name = name ;
}
print(){
console.log('Name is :'+ this.name);
}
}
Sekarang, pertama-tama, saya suka ini :) tetapi ini menimbulkan pertanyaan. Bagaimana Anda menggunakan ini yang dikombinasikan dengan node.js
struktur modul?
Katakanlah Anda memiliki kelas di mana Anda ingin menggunakan modul untuk kepentingan demonstrasi, katakanlah Anda ingin menggunakannya fs
jadi Anda membuat file Anda:
Animal.js
var fs = require('fs');
class Animal{
constructor(name){
this.name = name ;
}
print(){
console.log('Name is :'+ this.name);
}
}
Apakah ini cara yang benar?
Juga, bagaimana Anda mengekspos kelas ini ke file lain dalam proyek node saya? Dan apakah Anda masih dapat memperluas kelas ini jika Anda menggunakannya dalam file terpisah?
Saya harap beberapa dari Anda dapat menjawab pertanyaan-pertanyaan ini :)
sumber
animalModule
cukup berguna dalam modul node yang memiliki ruang lingkup modulnya sendiri.Jawaban:
Ya, teladan Anda akan bekerja dengan baik.
Adapun untuk mengekspos kelas Anda, Anda dapat
export
membuat kelas seperti yang lainnya:Atau lebih pendek:
Setelah diimpor ke modul lain, Anda dapat memperlakukannya seolah-olah itu didefinisikan dalam file itu:
sumber
module.exports
biasanya digunakan untuk ekspor anonim, sedangkanexport
digunakan untuk ekspor bernama. Ini adalah kesopanan pengkodean dasar (bisa Anda katakan), yang dapat membantu orang lain untuk mengetahui cara mengimpor kelas Anda, modul dan lain-lain.module.exports = Animal;
akan menjadi jawaban atau paling langsung setara dengan pertanyaan dan valid bersama denganconst Animal = require('./animal');
kode panggilan. Bisakah Anda memperbarui jawaban Anda untuk memasukkannya?Perlakukan saja nama kelas ES6 sama seperti Anda akan memperlakukan nama konstruktor dengan cara ES5. Mereka satu dan sama.
Sintaks ES6 hanyalah gula sintaksis dan membuat prototipe dasar, fungsi dan objek konstruktor yang sama persis.
Jadi, dalam contoh ES6 Anda dengan:
Anda bisa memperlakukan
Animal
seperti konstruktor objek Anda (sama seperti yang Anda lakukan di ES5). Anda dapat mengekspor konstruktor. Anda dapat memanggil konstruktor dengannew Animal()
. Semuanya sama untuk menggunakannya. Hanya sintaks deklarasi yang berbeda. Bahkan masih adaAnimal.prototype
yang memiliki semua metode Anda di atasnya. Cara ES6 benar-benar membuat hasil pengkodean yang sama, hanya dengan sintaks yang lebih bagus / lebih bagus.Di sisi impor, ini kemudian akan digunakan seperti ini:
Skema ini mengekspor konstruktor Animal sebagai
.Animal
properti yang memungkinkan Anda mengekspor lebih dari satu hal dari modul itu.Jika Anda tidak perlu mengekspor lebih dari satu hal, Anda dapat melakukan ini:
Dan, kemudian impor dengan:
sumber
module.exports = Animal
adalah satu-satunya solusi yang berhasil.require()
dari apa yang ditunjukkan ekspor Anda, jadi itulah sebabnya yang satu akan berhasil dan yang lainnya tidak. Anda harus mencocokkan cara kerja impor dengan cara ekspor didefinisikan. Lebih detail untuk menjelaskan ini ditambahkan ke jawaban saya.Cara kebutuhan ES6 adalah
import
. Anda dapatexport
kelas Anda dan mengimpornya di tempat lain menggunakanimport { ClassName } from 'path/to/ClassName'
sintaks.sumber
The ES6 way
agak menyesatkan.import
lebihrequire
hanya demi konsistensi sintaksis.import
dengan modul CommonJS kemungkinan besar tidak akan berfungsi di Node, jadi mungkin diperlukan perubahan kode di masa mendatang agar kompatibel dengan Node tanpa Babel .Menggunakan Kelas di Node -
Di sini kita membutuhkan modul ReadWrite dan memanggil makeObject (), yang mengembalikan objek kelas ReadWrite. Yang kami gunakan untuk memanggil metode. index.js
ReadWrite.js
Di sini kami membuat metode makeObject, yang memastikan bahwa suatu objek dikembalikan, hanya jika objek tidak tersedia.
Untuk penjelasan lebih lanjut, buka https://medium.com/@nynptel/node-js-boiler-plate-code-using-singleton-classes-5b479e513f74
sumber
Dalam file kelas, Anda dapat menggunakan:
atau Anda dapat menggunakan sintaks ini
Di sisi lain untuk menggunakan kelas ini di file lain, Anda perlu melakukan langkah-langkah ini. Pertama, minta file itu menggunakan sintaks ini:
const anyVariableNameHere = require('filePathHere');
Kemudian buatlah sebuah objek
const classObject = new anyVariableNameHere();
Setelah ini, Anda dapat menggunakan
classObject
untuk mengakses variabel kelas yang sebenarnyasumber