我正在尝试将Express app
的{{1}}函数更改为不区分大小写。这样
.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);
}
的设置属性。好像无法通过app
抓住它。
这有什么作用:
this
因此,只有将app.set_ = app.set;
app.set = function(setting){
setting = setting.toLowerCase();
return app.set_(setting, arguments[1]);
}
附加添加到set_
,才有效。
但我认为app
方法并且传递.call
应该基本相同,但事实并非如此。为什么会这样?
答案 0 :(得分:1)
apply
需要call
而不是arguments
,例如:
set.apply(app, arguments)
或者将call
与一个参数一起使用:
set.call(app, setting)
或者您可以永久绑定app
:
var set = app.set.bind(app)
然后正常调用该函数:
set(setting)