Модулі CommonJS дозволяють два способи визначення експортованих властивостей. В будь-якому випадку ви повертаєте об'єкт / функцію. Оскільки функції є першокласними громадянами в JavaScript, вони можуть діяти так само, як Об'єкти (технічно це Об'єкти). На це запитання щодо використання new
ключових слів є проста відповідь: так. Я проілюструю ...
Експорт модуля
Ви можете використовувати exports
змінну, надану для додавання до неї властивостей. Після необхідності в іншому модулі ці властивості призначення присвоюються. Або ви можете призначити об'єкт властивості module.exports. В будь-якому випадку те, що повертається, require()
- це посилання на значення module.exports
.
Приклад псевдокоду, як визначається модуль:
var theModule = {
exports: {}
};
(function(module, exports, require) {
// Your module code goes here
})(theModule, theModule.exports, theRequireFunction);
У наведеному вище прикладі є одним module.exports
і exports
тим же об'єктом. Класна частина полягає в тому, що ви не бачите нічого з цього у своїх модулях CommonJS, оскільки вся система піклується про те, що для вас все, що вам потрібно знати, є об’єкт модуля з властивістю експорту та змінною експорту, яка вказує на те саме, що робить module.exports.
Вимагайте з конструкторами
Оскільки ви можете приєднати функцію безпосередньо до module.exports
вас, ви можете по суті повернути функцію, як і будь-якою функцією, нею можна керувати як конструктор (Це курсивом, оскільки єдина різниця між функцією та конструктором у JavaScript - це те, як ви маєте намір її використовувати. Технічно різниці немає.)
Отже, наступний ідеально хороший код, і я особисто його заохочую:
// 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"
Вимога для неконструкторів
Те ж саме стосується і неконструкторських функцій:
// My Module
exports.someFunction = function someFunction(msg) {
console.log(msg);
}
// In another module
var MyModule = require("./my_module.js");
MyModule.someFunction("foobar"); // => "foobar"
square
в більше не існує.Square
new square()