gpt4 book ai didi

javascript - 绑定(bind) `this` 到 `call` 不起作用

转载 作者:行者123 更新时间:2023-12-03 11:03:50 27 4
gpt4 key购买 nike

我正在尝试将 Express app.set 函数更改为不区分大小写。这样

app.set('PORT',80);
app.set('port'); // => undefined; trying to make it so that it returns 80

在内部,它只是一个更改对象的settings 属性的函数。所以我尝试制作一个包装器

var set = app.set;
app.set = function(setting){
setting = setting.toLowerCase();
return set.call(app, arguments);
}

但是这不起作用。它根本不会更改应用的设置属性。好像它无法通过 this 获取它。

有效的方法是:

app.set_ = app.set;
app.set = function(setting){
setting = setting.toLowerCase();
return app.set_(setting, arguments[1]);
}

因此,只有当set_附加app时,它才起作用。

但我认为 .call 方法和传递 app 的作用本质上应该是相同的,但事实并非如此。为什么会这样?

最佳答案

对于参数,您需要apply而不是call,例如:

set.apply(app, arguments)

或者使用带有一个参数的call:

set.call(app, setting)

或者您可以永久绑定(bind)app:

var set = app.set.bind(app)

然后正常调用该函数:

set(setting)

关于javascript - 绑定(bind) `this` 到 `call` 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27955055/

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