nodejsの中でexportsとmodule.exportsの違いを詳しく紹介します.
2880 ワード
nodejsモジュールの中のexportオブジェクトをよく知っています.それを使ってモジュールを作成することができます.例えば:(これがロック.jsファイルと仮定する)
実は、Module.exportsは本物のインターフェースです.exportsはその補助ツールの一つにすぎません.最終的に呼び出しに戻ったのは、exportsではなくModule.exportsです.
すべてのexportが収集した属性と方法はModule.exportsに与えられた値です.もちろん、Module.exports自体には属性や方法がないという前提があります.もしModule.exportsがいくつかの属性と方法を備えているなら、exportsが収集した情報は無視されます.
rocker.jsを修正すると以下のようになります.
rockerモジュールは、exports収集のnameメソッドを無視して、文字列「ROCK IT!」を返します.これから分かるように、あなたのモジュールは必ずしも「実用化対象」に返さなくてもいいです.あなたのモジュールは任意の合法的なjavascriptオブジェクトであるブーメラン、number、date、JSON、string、function、arrayなどです.
モジュールはあなたが設定したものであってもいいです.Module.exportに明示的な属性と方法がない場合、モジュールはModule.exportsに設定されたプロパティです.
次の例では、あなたのモジュールはクラスです.
Module.exportに属性を追加します.exportsに属性を追加します.たとえば:
exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
他のファイルではこのように参照してください.
var rocker = require('./rocker.js');
rocker.name(); // 'My name is Lemmy Kilmister'
Module.exportは一体何ですか?それは合法ですか?実は、Module.exportsは本物のインターフェースです.exportsはその補助ツールの一つにすぎません.最終的に呼び出しに戻ったのは、exportsではなくModule.exportsです.
すべてのexportが収集した属性と方法はModule.exportsに与えられた値です.もちろん、Module.exports自体には属性や方法がないという前提があります.もしModule.exportsがいくつかの属性と方法を備えているなら、exportsが収集した情報は無視されます.
rocker.jsを修正すると以下のようになります.
module.exports = 'ROCK IT!';
exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
再度参照実行ロック.js
var rocker = require('./rocker.js');
rocker.name(); // TypeError: Object ROCK IT! has no method 'name'
エラー発見:対象「ROCK IT!」にはnameメソッドがありません.rockerモジュールは、exports収集のnameメソッドを無視して、文字列「ROCK IT!」を返します.これから分かるように、あなたのモジュールは必ずしも「実用化対象」に返さなくてもいいです.あなたのモジュールは任意の合法的なjavascriptオブジェクトであるブーメラン、number、date、JSON、string、function、arrayなどです.
モジュールはあなたが設定したものであってもいいです.Module.exportに明示的な属性と方法がない場合、モジュールはModule.exportsに設定されたプロパティです.
次の例では、あなたのモジュールはクラスです.
module.exports = function(name, age) {
this.name = name;
this.age = age;
this.about = function() {
console.log(this.name +' is '+ this.age +' years old');
};
};
このように適用できます.
var Rocker = require('./rocker.js');
var r = new Rocker('Ozzy', 62);
r.about(); // Ozzy is 62 years old
下の例では、あなたのモジュールは行列です.
module.exports = ['Lemmy Kilmister', 'Ozzy Osbourne', 'Ronnie James Dio', 'Steven Tyler', 'Mick Jagger'];
このように適用できます.
var rocker = require('./rocker.js');
console.log('Rockin in heaven: ' + rocker[2]); //Rockin in heaven: Ronnie James Dio
今はわかりました.モジュールが特定のタイプの場合はModule.exportsを使います.あなたが考えているモジュールが典型的な「実用化対象」であれば、exportsを使います.Module.exportに属性を追加します.exportsに属性を追加します.たとえば:
module.exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
同様に、exportはこうです.
exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
この二つの結果は同じではないので注意してください.前に述べたmodule.exportsは本当のインターフェースです.exportsはその補助ツールにすぎません.exportを使ってエクスポートすることを推奨します.元の「実用化対象」から類型に変えない限り.