CommonJS modülleri, dışa aktarılan özellikleri tanımlamak için iki yol sağlar. Her iki durumda da bir Nesne / Fonksiyon döndürüyorsunuz. Fonksiyonlar JavaScript'te birinci sınıf vatandaş olduklarından, tıpkı Nesneler gibi hareket edebilirler (teknik olarak Nesnelerdir). Bu, new
anahtar kelimeleri kullanma hakkındaki sorunuzun basit bir cevabı olduğunu söyledi: Evet. Göstereceğim ...
Modül dışa aktarımı
exports
Özellik eklemek için sağlanan değişkeni kullanabilirsiniz . Başka bir modülde gerektiğinde, bu atama özellikleri kullanılabilir hale gelir. Veya module.exports özelliğine bir nesne atayabilirsiniz. Her iki durumda da döndürülen require()
şey değerine bir referanstır module.exports
.
Bir modülün nasıl tanımlandığına dair sözde kod örneği:
var theModule = {
exports: {}
};
(function(module, exports, require) {
// Your module code goes here
})(theModule, theModule.exports, theRequireFunction);
Yukarıdaki örnekte module.exports
ve exports
aynı nesnedir. İşin güzel yanı, CommonJS modüllerinizde bunlardan hiçbirini görmemenizdir, çünkü tüm sistem sizin için tüm bilmeniz gereken şey, bir dışa aktarma özelliği olan bir modül nesnesi ve module.exports'un yaptığı aynı şey.
Yapıcılar ile gerektir
Bir işlevi doğrudan module.exports
size ekleyebildiğiniz için , aslında bir işlevi döndürebilirsiniz ve herhangi bir işlev gibi, bir kurucu olarak yönetilebilir (Bu italik olarak yazılmıştır çünkü JavaScript'teki bir işlev ile yapıcı arasındaki tek fark onu nasıl kullanmayı düşündüğünüzdür. hiçbir fark yok.)
Dolayısıyla, aşağıdaki mükemmel bir kod ve ben şahsen onu teşvik ediyorum:
// 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"
Yapıcı olmayanlar için gerekli
Aynı şey yapıcı olmayan benzeri işlevler için de geçerlidir:
// My Module
exports.someFunction = function someFunction(msg) {
console.log(msg);
}
// In another module
var MyModule = require("./my_module.js");
MyModule.someFunction("foobar"); // => "foobar"
square
için artık mevcut değil.Square
new square()