javascript方法在回调中无权访问“this”

时间:2013-08-11 20:44:32

标签: javascript node.js

Javascript和Node的新手。我在Node中使用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。但我不确定如何解决它。有小费吗?谢谢!

1 个答案:

答案 0 :(得分:3)

致电.bind

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

并查看MDN documentation about this以了解其工作原理。 this的值由如何调用函数确定。将其称为“正常”(回调可能发生的情况),例如

func();

this设置为全局对象。仅当函数作为对象方法调用时(或者this明确设置为.bind.apply.call时),this指的是对象:

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

.bind允许您在不调用函数的情况下指定this值。它只返回一个新函数,类似于

function bind(func, this_obj) {
    return function() {
        func.apply(this_obj, arguments);
    };
}