ホームページ > ウェブフロントエンド > jsチュートリアル > Node.js の「module.exports」と「exports」の違いは何ですか?なぜ両方とも使用されるのでしょうか?

Node.js の「module.exports」と「exports」の違いは何ですか?なぜ両方とも使用されるのでしょうか?

Patricia Arquette
リリース: 2024-11-22 11:44:09
オリジナル
248 人が閲覧しました

What is the difference between `module.exports` and `exports` in Node.js, and why are both used?

Node.js の「module.exports」と「exports」の違いを調べる

Node.js モジュール システムでは、 2 つの注目すべき変数は、「module.exports」と「exports」です。これらは互換性があるように見えますが、効果的なモジュール開発にはそれらのニュアンスを理解することが重要です。

提供された質問に記載されているコントラクトについて考えてみましょう。

module.exports = exports = nano = function database_module(cfg) {...}
ログイン後にコピー

この構文では、次のような疑問が生じます。 「module.exports」と「exports」の違い、そしてなぜ両方が使用されるのですか?

これを解明するにはパズルのように、すべてのモジュールが次の行で始まると想像してみましょう:

var module = new Module(...);
var exports = module.exports;
ログイン後にコピー

本質的に、「module.exports」と「exports」は最初は同じオブジェクトを指します。 「exports」に値を割り当てると、実際には「module.exports」が参照するオブジェクトを変更することになります。

コントラクトの例では、まず「安全な」アプローチを検討してみましょう。

// Using module.exports
module.exports.a = function() {
    console.log('a');
}

module.exports.b = function() {
    console.log('b');
}
ログイン後にコピー

ここで、「安全」とは、「module.exports」がエクスポートされた関数を含むオブジェクトのままであることを意味します。このモジュールを必要とする場合、このオブジェクトを取得します。

ただし、'exports' への割り当ては「危険」になる可能性があります:

// Using exports
exports.a = function() {
    console.log('a');
}

exports.b = function() {
    console.log('b');
}
ログイン後にコピー

一方、'module.exports' と 'exports' の両方最初は同じオブジェクトを指しており、「exports」に直接代入すると、その参照が壊れます。結果として、「module.exports」は引き続き空のオブジェクト {} を指します。これは、モジュールが必要なときに返されます。

コンストラクター関数を「module.exports」に割り当てると、 「エクスポート」の場合とは異なる意味があります:

// Assigning constructor to module.exports
module.exports = function Something() {
    console.log('bla bla');
}
ログイン後にコピー

この場合、返される結果の「typeof」は次のようになります。 '関数。'これにより、モジュールを関数として直接要求して呼び出すことができます。

ただし、コンストラクターを 'exports' に割り当てても同じ効果はありません。

// Assigning constructor to exports
exports = function Something() {
    console.log('bla bla');
}
ログイン後にコピー

'exports を再割り当てすると、 ' 「module.exports」とコンストラクター関数の間の接続を切断し、「module.exports」を空のままにします。 object.

結論として、効果的な Node.js モジュールを開発するには、「module.exports」と「exports」の微妙な違いを理解することが不可欠です。両方の変数は最初は同じオブジェクトを指しますが、「module.exports」はエクスポートされたオブジェクトを一貫して指すため、モジュールから値をエクスポートする正式な方法であると考える必要があります。一方、「エクスポート」は、エクスポートされたオブジェクトを直接変更する必要がある場合、またはコンストラクター関数を割り当てる場合に便利です。

以上がNode.js の「module.exports」と「exports」の違いは何ですか?なぜ両方とも使用されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート