1

2 つの方法で使用できexpressます。つまり、2 つの方法で初期化できます。

var app = express();またvar app = new express();

見た目から、どちらもコンストラクターを呼び出しているので、実際に2つに違いはありますか?

実際の違いがない場合、私が見たすべてのチュートリアルは、2 番目の方法ではなく最初の方法でそれを行うのはなぜですか。

4

1 に答える 1

3

この場合express()、関数として呼び出す方が正しいです。

https://github.com/visionmedia/express/blob/8a1e865e37016f279d957f04117007c36ac195e3/lib/express.js#L32

function createApplication() {
  var app = connect();
  utils.merge(app, proto);
  app.request = { __proto__: req, app: app };
  app.response = { __proto__: res, app: app };
  app.init();
  return app;
}

これは基本的にファクトリー関数であり、コンストラクターではありません。キーワードを使用newすると、不要なオブジェクトが作成されます。これは、 がオブジェクトを返すため、キーワードが作成createApplicationする自動オブジェクトが破棄されるため、すぐに破棄されます(これが JavaScript 言語のしくみです)。thisnew

したがって、答えは両方のバージョンが正常に動作するということですが、newここでは使用する必要はありません。

于 2013-08-15T22:00:45.893 に答える