gpt4 book ai didi

javascript - 当我使用方法作为回调时,它似乎失去了对 `this` 的访问权限。为什么?

转载 作者:行者123 更新时间:2023-11-28 20:21:48 24 4
gpt4 key购买 nike

我在 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:无法读取 res.send 处未定义的属性“方法”。中断的快速代码如下所示:

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

在我看来,我构建回调的方式在 send 方法中丢失了 this 。但我不知道如何解决它。有小费吗?谢谢!

最佳答案

调用.bind :

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

看看 MDN documentation about this了解它是如何工作的。 this 的值由函数的调用方式决定。称其为“正常”(回调可能发生的情况),例如

func();

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

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

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

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

关于javascript - 当我使用方法作为回调时,它似乎失去了对 `this` 的访问权限。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18176487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com