我不确定我是接近这种最好的方式,但我真的很想知道为什么会发生这种情况。
var sessionMethods = {
isOnline: function (s) { /* */ },
isOffline: function (s) { /* */ },
};
function defaultCallback() {
if (typeof arguments[0] !== 'object') {
arguments[0] = {};
} else if ('session' in arguments[0]) {
arguments[0] = arguments[0].session;
}
// Here this has for value session object !!
// i want to access session[currentFunction].callback
return this.callback.apply(this, arguments);
}
var session = {};
for (var key in sessionMethods) {
session[key] = defaultCallback;
session[key].callback = sessionMethods[key];
}
我的最终目标是通过添加某种中间件功能来避免冗余代码,如果不需要,可以将请求转换为请求会话,以后可能会做更多的事情。
但是,如果我能够更多地this
工作,那就太棒了!
答案 0 :(得分:0)
好的,我现在了解this
如何工作以及bind()
做了什么,感谢目光 comment。
以下是我对它的理解:this
永远不代表当前的函数对象,但它是调用该函数的对象,我们可以使用bind指定一个上下文,以确保调用该函数正确的this
对象。
答案 1 :(得分:-1)
如果你指定了这个'到变量然后将存储上下文。
// Here this has for value session object !!
// i want to access session[currentFunction].callback
var self = this; // <-- assign this to a variable.
return this.callback.apply(self , arguments);