二つのexport方式の違い


nodeの中でモジュールをエクスポートするには、一つは直接にobjectをエクスポートし、functionをexportsの属性とします.第二の方法は一つのfunctionを導き出すことで、本当にエクスポートしたいfunctionはprototypeに書きます.
exports.sayHello = sayHello;

function sayHello(){
    console.log("hello world");
}
var obj = require("./method1");

obj.sayHello();
別の方法:
exports = module.exports = Person;

function Person(){

}

Person.prototype.sayHello = function(){
    console.log("hello world");
}
var Person = require("./method2");

var someone = new Person();

someone.sayHello();
両方ともいいです.一つ目はもっと一般的ですが、二つ目の方式(たとえば、express)を使うものも多いです.第二の方法を使えば、外部から導出された構造関数が得られ、いくつかの公共の方法を追加する機会がある.
var Person = require("./method2");

Person.prototype.sayAge = function(){
    console.log(100);
}
もう一つの利点は、第二の方法で導き出すことです.WebStromで直接プロトタイプにリンクできるfunction定義で、コードを読みやすいです.
一つの書き方を見たことがあります.2つの方法を混ぜて使うのです.
exports = module.exports = Person;

function Person(){

}

Person.prototype.sayHello = function(){
    console.log("hello world");
}

Person.sayName = function(){
    console.log("my name is kyfxbl");
}
var Person = require("./method2");

Person.sayName();

var someone = new Person();
someone.sayHello();
javascriptの中で、functionもobjectで、自分の属性があることができますので、他のfunctionをこのコンストラクションにかけることができます.
実はもう一つの簡単な方法があります.デフォルトでは、this、export、module.exportは同じobjectを指しています.
this.sayHello = sayHello;

function sayHello(){
    console.log("hello world");
}
sayHello関数をエクスポートすることもできますが、これは直感的ではなく、IDEもsayHelloメソッドを認識できないので、おすすめできません.