node.js(およびjavascript)で再生を開始したばかりであり、基本的な誤解があります。次のコードは期待どおりに動作します。データを取得するために抽出された関数を除いて、エクスプレス付きの単純なAPIのチュートリアルから取得されています(ただし、あまり有益ではないスタックトレースを除いて復元でも発生します)。渡されたオブジェクトのメソッド呼び出しと異なる、渡されたメソッド/関数内の `this`がなぜですか
var getdataandsend = function(request,respfun) {
respfun({a:1,b:2});
}
app.get('/:id', function (request, response) {
getdataandsend(request,response.send);});
:
var express = require('express');
var app = express();
var getdataandsend = function(request,response) {
var res = {a:1,b:2}; // actually sql query using request.params
response.send(res);
}
app.get('/:id', function (request, response) {
getdataandsend(request,response);});
var server = app.listen(1234, function() {});
しかし、私は、そのsend
メソッドを呼び出すためにgetandsenddata
にresponse
を通過するので、私は、同様の方法自体の代わりに、全体のオブジェクトへの参照/ポインタを渡すかもしれないことを考え出し
しかし、これはresponse.jsで該当する行がです以下
TypeError: Cannot read property 'req' of undefined
at send (...\test\node_modules\express\lib\response.js:103:17)
at getdataandsend (...\test\misctest.js:6:9)
at ...\test\misctest.js:9:6
at Layer.handle [as handle_request] (...\test\node_modules\express\lib\router\layer.js:95:5)
...
になりは、そのファイル内のその名前の変数の最初の出現です。明らかに、応答オブジェクトのメソッドsend
が同じ場所(getdataandsend
)から呼び出されたとしても、上記の2つの呼び出しでは、this
の値が異なります。 this answerとthat answerに続いて、最初の呼び出しがメソッドとみなされ、2番目の呼び出しが関数呼び出しと見なされる場合、観測された振る舞いは意味をなさないかもしれませんが、なぜそうであるのでしょうか? send
は依然としてresponse
の方法ですか?または両方の関数呼び出し(... response
は何ですか?)ですか?
より高く評価された回答には、受け入れられた回答よりも多くの情報があるため、両方を必ず読んでください。 –