Modul CommonJS memungkinkan dua cara untuk menentukan properti yang diekspor. Dalam kedua kasus Anda mengembalikan Objek / Fungsi. Karena fungsi adalah warga kelas pertama dalam JavaScript, mereka dapat bertindak seperti Objek (secara teknis mereka adalah Objek). Oleh karena itu, pertanyaan Anda tentang penggunaan new
kata kunci memiliki jawaban yang sederhana: Ya. Saya akan menggambarkan ...
Ekspor modul
Anda dapat menggunakan exports
variabel yang disediakan untuk melampirkan properti padanya. Setelah diperlukan dalam modul lain, properti yang ditetapkan tersebut menjadi tersedia. Atau Anda dapat menetapkan objek ke properti module.exports. Dalam kedua kasus, apa yang dikembalikan oleh require()
adalah referensi ke nilai module.exports
.
Contoh pseudo-code tentang bagaimana modul didefinisikan:
var theModule = {
exports: {}
};
(function(module, exports, require) {
// Your module code goes here
})(theModule, theModule.exports, theRequireFunction);
Pada contoh di atas module.exports
dan exports
merupakan objek yang sama. Bagian yang keren adalah Anda tidak melihat semua itu di modul CommonJS Anda karena seluruh sistem mengurusnya untuk Anda semua yang perlu Anda ketahui adalah ada objek modul dengan properti ekspor dan variabel ekspor yang menunjuk ke hal yang sama yang dilakukan module.exports.
Wajibkan dengan konstruktor
Karena Anda dapat melampirkan fungsi secara langsung, module.exports
Anda pada dasarnya dapat mengembalikan fungsi dan seperti fungsi lainnya, fungsi tersebut dapat dikelola sebagai konstruktor (Itu dicetak miring karena satu-satunya perbedaan antara fungsi dan konstruktor dalam JavaScript adalah cara Anda menggunakannya. Secara teknis tidak ada perbedaan.)
Jadi berikut ini adalah kode yang sangat bagus dan saya pribadi mendorongnya:
// My module
function MyObject(bar) {
this.bar = bar;
}
MyObject.prototype.foo = function foo() {
console.log(this.bar);
};
module.exports = MyObject;
// In another module:
var MyObjectOrSomeCleverName = require("./my_object.js");
var my_obj_instance = new MyObjectOrSomeCleverName("foobar");
my_obj_instance.foo(); // => "foobar"
Wajibkan untuk non-konstruktor
Hal yang sama berlaku untuk fungsi seperti non-konstruktor:
// My Module
exports.someFunction = function someFunction(msg) {
console.log(msg);
}
// In another module
var MyModule = require("./my_module.js");
MyModule.someFunction("foobar"); // => "foobar"
square
untukSquare
yangnew square()
tidak ada lagi.