通过`call`绑定`this`无法正常工作

时间:2015-01-15 00:40:17

标签: javascript node.js express this

我正在尝试将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应该基本相同,但事实并非如此。为什么会这样?

1 个答案:

答案 0 :(得分:1)

apply需要call而不是arguments,例如:

set.apply(app, arguments)

或者将call与一个参数一起使用:

set.call(app, setting)

或者您可以永久绑定app

var set = app.set.bind(app)

然后正常调用该函数:

set(setting)