nodeJSにおけるexportsとmopdule.exportsの違い
6776 ワード
各node.js実行ファイルは自動的にmoduleオブジェクトを作成します.同時に、moduleオブジェクトはexportsという属性を作成します.初期化の値は{}です.
foo.js
次の例を見てみます.
foo.js
初めはちょっと広くて明るいですか?下にはオープンソースモジュールの中によく見られるいくつかの使用方法があります.
璣璣module.export=View
foo.js
test.js
実は、原理を知ったら、このような書き方はちょっと冗長です.実は保証のために、モジュールの初期化環境は清潔です.同時に私達にも便利です.module.exportsの指す対象を変えてもexportsの特性をそのまま適用できます.
璣璣啝exports.init=function()
これが一番簡単で、直接モジュールinitをエクスポートする方法です.
ヽoo.ツ=new Mongoose.
集多機能は一つですが、上記に述べたように、皆さんは答えを出せないはずです.
https://cnodejs.org/topic/5231a630101e574521e45ef8
exportsとmodule.exportsの違いを理解しています.
よりよく理解するために
app.js
上記の例が分かりましたら、本題に入ります.私たちは3時まで知っています. だから:私達は に相当します.私達は普通このように使います. 私達はよくこのような書き方を見ます.
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.exportが変更された場合、exportsは変更されません.モジュールがエクスポートされた時、本当にエクスポートされた実行はmodule.exportsではなく、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)
レスリング: 2
exportsはmodule.exportsが変更された後、失効します.初めはちょっと広くて明るいですか?下にはオープンソースモジュールの中によく見られるいくつかの使用方法があります.
璣璣module.export=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には、関数は対象であり、Viewは対象であり、module.export=Viewは、全体のviewオブジェクトを導出するのに相当する言葉があります.外のモジュールがそれを呼び出すと、Viewのすべての方法を呼び出すことができます.ただし、Viewの静的な方法である場合にのみ呼び出しが可能であり、prototypeの作成方法は、Viewのプライベートな方法であることに注意が必要である.foo.js
function View(){
}
View.prototype.test = function(){
console.log('test')
}
View.test1 = function(){
console.log('test1')
}
module.export=Viewtest.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 ap=export=module.export={}実は、原理を知ったら、このような書き方はちょっと冗長です.実は保証のために、モジュールの初期化環境は清潔です.同時に私達にも便利です.module.exportsの指す対象を変えてもexportsの特性をそのまま適用できます.
exports = module.exports = createApplication;
/**
* Expose mime.
*/
exports.mime = connect.mime;
例では、module.exports = createApplication
はmodule.exportsを変更し、exportを失効させ、export=module.exportの方法を通じて、元の特徴を回復させる.璣璣啝exports.init=function()
これが一番簡単で、直接モジュールinitをエクスポートする方法です.
ヽoo.ツ=new Mongoose.
集多機能は一つですが、上記に述べたように、皆さんは答えを出せないはずです.
https://cnodejs.org/topic/5231a630101e574521e45ef8
exportsとmodule.exportsの違いを理解しています.
よりよく理解するために
exports
和 module.exports
私たちはまずjsの基礎を補います.例:app.js
var a = {name: 'nswbmw 1'};
var b = a;
console.log(a);
console.log(b);
b.name = 'nswbmw 2';
console.log(a);
console.log(b);
var b = {name: 'nswbmw 3'};
console.log(a);
console.log(b);
アプリ.jsを実行した結果:D:\>node app
{ name: 'nswbmw 1' }
{ name: 'nswbmw 1' }
{ name: 'nswbmw 2' }
{ name: 'nswbmw 2' }
{ name: 'nswbmw 2' }
{ name: 'nswbmw 3' }
D:\>
aはオブジェクトであり、bはaに対する参照であり、aとbは同じオブジェクト、つまりaとbは同じブロックのメモリアドレスを指すので、前の二つの出力は同じです.bを修正すると、つまりaとbは同じメモリアドレスを指す内容が変更されたので、aも体現しているので、第三四の出力は同じです.bを完全にカバーすると、bは新しいメモリアドレスを指しています(元のメモリブロックを修正していません).aは元のメモリブロックを指しています.つまり、aとbはもう同じメモリを指していません.つまり、aとbはもう関係がないので、最後の二つの出力は違っています.上記の例が分かりましたら、本題に入ります.私たちは3時まで知っています.
exports
和 module.exports
の違いがありますexports
はい、指します module.exports
の引用module.exports
初期値は空のオブジェクトです. {}
です.ですから exports
初期値も {}
require()
帰るのは module.exports
ではなく exports
var name = 'nswbmw';
exports.name = name;
exports.sayName = function() {
console.log(name);
}
を通してあげます. exports
賦課は実は与えるものです module.exports
この空のオブジェクトには二つの属性が追加されています.上のコードは var name = 'nswbmw';
module.exports.name = name;
module.exports.sayName = function() {
console.log(name);
}
exports
和 module.exports
の簡単な例では、円の面積を計算します.exportap.js var circle = require('./circle');
console.log(circle.area(4));
circle.js exports.area = function(r) {
return r * r * Math.PI;
}
を使用して、module.exportap.js var area = require('./area');
console.log(area(4));
ara.js module.exports = function(r) {
return r * r * Math.PI;
}
上の二つの例を使って出力します.なぜこのように書かないのですか?app.js var area = require('./area');
console.log(area(4));
ara.js exports = function(r) {
return r * r * Math.PI;
}
が上記の例を実行するとエラーが発生します.なぜなら、前の例では exports
属性を追加します. exports
指したメモリは修正されました. exports = function(r) {
return r * r * Math.PI;
}
は正しいです. exports
上書きしました.つまり exports
新しいメモリを指しています.つまり、円面積を計算する関数です. exports
和 module.exports
もう同じメモリを指しません.つまりこの時です. exports
和 module.exports
連絡がないということは module.exports
指しているメモリは何も変わっていません.まだ空のオブジェクトです. {}
,つまり、ara.jsは空いているオブジェクトを導出しました.だから、ap.jsでara(4)会報を呼びます. TypeError: object is not a function
のエラーですから、一つの言葉をまとめます.モジュールにエクスポートしたいのは対象です. exports
和 module.exports
どちらも使えます exports
新しいオブジェクトに上書きすることもできません.オブジェクト以外のインターフェースをエクスポートするには、上書きするしかありません. module.exports
. exports = module.exports = somethings
の上のコードは module.exports = somethings
exports = module.exports
の原因に相当します. module.exports = somethings
はい、そうです module.exports
上書きしました. module.exports
和 exports
の関係が破断されました. 新しいメモリブロックを指しますが、 module.exports
元のメモリブロックを指します. exports
和 module.exports
それとも同じメモリを指していますか?それとも同じ「対象」を指していますか? exports
.