1

expressノードで使用して、単純な Web アプリを作成しています。コードは次のようになります。

var get_stuff = function (callback) {
    another.getter(args, function (err, data) {
        if (err) throw err;

        data = do_stuff_to(data);

        callback(data);
    });
};

app.get('/endpoint', function (req, res) {
    get_stuff(res.send);
});

ただし、これを実行すると、次のエラーが発生しますTypeError: Cannot read property 'method' of undefined at res.send。破損している高速コードは次のように始まります。

res.send = function (body) {
    var req = this.req;
    var head = 'HEAD' == req.method;

メソッドでコールバックを構築した方法が失わthisれているsendようです。しかし、それを修正する方法がわかりません。任意のヒント?ありがとう!

4

2 に答える 2

3

電話.bind

get_stuff(res.send.bind(res));

MDN のドキュメントthisを見て、それがどのように機能するかを理解してください。の値は、関数の呼び出し方法thisによって決まります。「通常」と呼ぶ (コールバックでおそらく起こること)、

func();

thisグローバル オブジェクトに設定されます。関数がオブジェクト メソッドとして呼び出された場合 (またはthisが で明示的に設定されている場合.bind.applyまたは.callが使用されている場合) のみ、thisオブジェクトを参照します。

obj.fun(); // `this` refers to `obj` inside the function

.bindthis関数を呼び出さずに値を指定できます。次のような新しい関数を返すだけです。

function bind(func, this_obj) {
    return function() {
        func.apply(this_obj, arguments);
    };
}
于 2013-08-11T20:45:51.733 に答える