2

nodejs のルーティング フレームワークを作成しようとしています。ServerRequest と ServerResponse のヘルパー メソッドをいくつか追加する必要があります。エクスプレスがプロトタイプの変更から変更に変更されたことに気付きました

エクスプレス/response.js

var res = module.exports = {
  __proto__: http.ServerResponse.prototype
};

res.redirect = function (url) {
  ...
}

そして、express/middlewares.js

expressInit = function(req, res, next) {
  // ...
  res.__proto__ = app.response;
  next()
}

しかし、私のフレームワークでは、単純にするのが好きです:

http.ServerResponse.prototype.redirect = function(url) {
  ...
}

Express がオーバーライドのスタイルを変更する理由がわからないことがあるかどうかはわかりません。

4

2 に答える 2

0

Express の方法で行うと、ServerResponse のそのインスタンスの応答オブジェクトのみが変更されます。メソッドは、ノード プロセス内の任意のサーバーによって作成されたすべての応答にリダイレクト機能をグローバルに追加します。

ノード プロセス内で複数のフレームワークとサーバーを実行していた場合、またはそうしている可能性のある他の人とコードを共有したい場合、別のフレームワークもリダイレクト機能を追加し、衝突が発生する可能性があるため、問題になる可能性があります。一般に、所有していないオブジェクトを変更することは、悪いスタイルと見なされます。

Express の方法にはパフォーマンス ペナルティが伴いますが、おそらく他の方法で実行するとパフォーマンスが低下します。

于 2014-11-08T00:03:20.803 に答える
0

__proto__疑似属性は非標準であるため、その使用は決して適切ではないことに注意してください。さらに、Mozilla Developer Network (MDN) によると、現在は「非推奨」と見なされています。

ただし、prototype関数のプロパティは言語の標準部分であり、その使用は常に安全です。

常に使用しMyFunction.prototype、決して使用しないでmyObject.__proto__ください。

于 2012-05-23T15:15:09.453 に答える