ホームページ  >  記事  >  バックエンド開発  >  jsでのエクスポートの詳しい説明

jsでのエクスポートの詳しい説明

小云云
小云云オリジナル
2018-03-31 16:36:5424629ブラウズ

この記事では、主にコードの形式で js でのエクスポートについて詳しく説明します。お役に立てれば幸いです。

関連ビデオの推奨事項: 1.JavaScriptクイックスタート_翡翠少女般若心経シリーズ
関連マニュアルの推奨事項: 1.JavaScript中国語リファレンスマニュアル

ライティング1

exports.hello = function(){
    console.log(‘world’);
}

ライティング2

var f = {
    hello : function(){
        console.log(‘world’);
    }
}
module.exports = f;

書くモジュールのファイル名がhello.jsだとすると、以下のコードを実行します

var h = require(‘hello’);
h.hello();

上記2つの書き方の場合、このコードを実行した結果は同じです。

module.exports:

例:

1、

//a.js
module.exports = ['aaa',18]
//b.js
var a= require('a')console.log(a[1]) //输出18

2、

//a.js
module.exports =function(){
this.show=function(){
console.log('hahah~');
}
}
//b.js
var a= require('a');
var obj = new a();obj .show();//输出hahah~
module.exports

私の理解は次のとおりです: module.exportsに割り当てるもの、require後に何かを取得します

exports : 

//a.js
exports.show =function(){
console.log('hahah~');
}
//b.js
var a= require('a');
a.show();//输出hahah~

exportsはすでにオブジェクトになっている場合、このオブジェクトに属性を追加すると、エクスポート オブジェクトが取得されます。

ただし、exports={}

のように、新しいオブジェクトをエクスポートに割り当てることはできません。module.exports にすでにコンテンツがある場合、エクスポートのすべての操作が無効になることに注意してください

プロトタイプについて話しましょう。もう一度、プロトタイプは何に使用されますか? プロトタイプは、C++ の親クラスと同じです
1、

//a.js
module.exports =function(){
}
module.exports.prototype.show = function(){
console.log('hahah~');
}
//b.js
var a= require('a');
var obj = new a()
obj.show()//输出hahah~

最後に、クラスメソッドについて話しましょう。クラスに関しては、module.exports を使用する必要があります。

ここに栗があります

1、

//a.js
module.exports =function(){
}
module.exports.show = function(){
console.log('hahah~');
}
//b.js
var a= require('a');
a.show()//输出hahah~
##module.exports与exports的区别

すべてのnode.js実行ファイルは自動的にモジュールオブジェクトを作成します。同時に、モジュールオブジェクトはexportsと呼ばれる属性を作成し、初期化された値は{}

module.exports = {};
Node.js为了方便地导出功能函数,node.js会自动地实现以下这个语句
foo.js
exports.a = function(){
console.log('a')
}
exports.a = 1 
test.js
var x = require('./foo');
console.log(x.a)
です。

参照 この時点で、exports が module.exports の値を参照していることは、誰もが答えを見たと思います。

module.exports が変更されても、exports は変更されません。また、モジュールがエクスポートされるとき、実際のエクスポートの実行は、exports ではなく module.exports です

次の例をもう一度見てください

foo.js
exports.a = function(){
 console.log('a')
}
module.exports = {a: 2}
exports.a = 1 
test.js
var x = require('./foo');
console.log(x.a)
result:
2

module.exports の exports変更後は無効となります。
少しは啓発されたと感じ始めていますか? ここでは、オープンソース モジュールでよく見られる使用方法をいくつか紹介します。

##module.exports = View
function View(name, options) { 
  options = options || {};
  this.name = name;
  this.root = options.root;
  var engines = options.engines;
  this.defaultEngine = options.defaultEngine;
  var ext = this.ext = extname(name);
  if (!ext && !this.defaultEngine) throw new Error('No default engine was specified and no         extension was provided.');
  if (!ext) name += (ext = this.ext = ('.' != this.defaultEngine[0] ? '.' : '') +     this.defaultEngine);
  this.engine = engines[ext] || (engines[ext] = require(ext.slice(1)).__express);
  this.path = this.lookup(name);
}
module.exports = View;

JavaScript には、関数はオブジェクト、ビューはオブジェクト、 module.export =View という格言がありますが、これはビュー オブジェクト全体をエクスポートすることと同じです。

外部モジュールが呼び出すと、View のすべてのメソッドを呼び出すことができます。ただし、プロトタイプで作成されたメソッドは View のプライベート メソッドであるため、呼び出すことができるのは View の静的メソッドのみであることに注意してください。

foo.js
function View(){
}
View.prototype.test = function(){
 console.log('test')
}
View.test1 = function(){
 console.log('test1')
}
module.exports = View
test.js
var x = require('./foo');
console.log(x) //{ [Function: View] test1: [Function] }
console.log(x.test) //undefined
console.log(x.test1) //[Function]
x.test1() //test1
##var app = exports = module.exports = {};

実際、原理を理解すると、この書き方が少し冗長であることを理解するのは難しくありません。実際には、モジュールの初期化環境をクリーンにするためです。同時に、 module.exports が指すオブジェクトを変更した後でも、 module.exports = createApplication が module.exports とエクスポートを無効にするには、exports = module メソッドを渡して元の特性を復元します。

##exports.init= function(){}

これは、最も単純で直接エクスポートされるモジュールの初期化メソッドです。

##var mongoose = module.exports = exports = new Mongoose;

複数の機能を 1 つにまとめていますが、上記の説明に基づくと、答えは得られないはずです。

以上がjsでのエクスポートの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。