nodejs exportとmodule.exportsの違い
ある時はただ一つの対象をモジュールに入れたいだけです.例えば、
//singleobject.js
//gethello.js
var Hello=require('./hello')
ハロー=new Hello();
ハロー.set Name('BYVoid')
ハロー.sayHello()
モジュールインターフェースの唯一の変化は、exports.Helloの代わりにmodule.exports=Helloを使用することである.このモジュールを外部から引用する場合、そのインターフェースオブジェクトは出力するハローオブジェクト自体であり、元のものではありません.
exports実際には、exports自体は普通の空のオブジェクトであり、すなわち{}インターフェースを宣言するために専用に使われています.本質的には、モジュールのクローズド①の内部に限られたアクセスインターフェースが作られています.特別なところがないので、例えば上記の例のハローオブジェクトの代わりに他のものを使ってもいいです.
注:exportに直接価値を付与することによりmodule.exportsに対して価値を付与してはいけません.exportsは実際にはmodule.exportsと同じオブジェクトの変数だけを指しています.それ自体はモジュール実行終了後にリリースされますが、moduleはできません.したがって、module.exportsを指定することにより、アクセスインターフェースを変更するしかありません.
//singleobject.js
function Hello() {
var name;
this.setName = function (thyName) {
name = thyName;
};
this.sayHello = function () {
console.log('Hello ' + name);
};
};
exports.Hello = Hello;
この時、私たちは他のファイルでrequire('./singleobject').Helloを通じてHelloオブジェクトを取得する必要があります.下の書き方を見てください.function Hello() {
var name;
this.setName = function(thyName) {
name = thyName;
};
this.sayHello = function() {
console.log('Hello ' + name);
};
};
module.exports = Hello;
このオブジェクトは直接に入手できます.//gethello.js
var Hello=require('./hello')
ハロー=new Hello();
ハロー.set Name('BYVoid')
ハロー.sayHello()
モジュールインターフェースの唯一の変化は、exports.Helloの代わりにmodule.exports=Helloを使用することである.このモジュールを外部から引用する場合、そのインターフェースオブジェクトは出力するハローオブジェクト自体であり、元のものではありません.
exports実際には、exports自体は普通の空のオブジェクトであり、すなわち{}インターフェースを宣言するために専用に使われています.本質的には、モジュールのクローズド①の内部に限られたアクセスインターフェースが作られています.特別なところがないので、例えば上記の例のハローオブジェクトの代わりに他のものを使ってもいいです.
注:exportに直接価値を付与することによりmodule.exportsに対して価値を付与してはいけません.exportsは実際にはmodule.exportsと同じオブジェクトの変数だけを指しています.それ自体はモジュール実行終了後にリリースされますが、moduleはできません.したがって、module.exportsを指定することにより、アクセスインターフェースを変更するしかありません.