`这个`返回父对象的值,而不是当前函数
问题描述:
我不确定我是否接近这个最糟糕的方式,但我真的很想理解为什么会发生这种情况。`这个`返回父对象的值,而不是当前函数
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];
}
我的最终目标是要能够通过添加某种中间件的功能,将转换如果nescessary请求之间的会话,也许做更多的东西以后,以避免冗余代码。
但是,如果我可以undrestand多一点如何this
工作,那将是伟大的!
答
如果您将“this”赋值给变量,那么上下文将被存储。
// 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);
+0
没有在这一点'this'没有回调,所以这是不可能的调用未定义的apply() – kigiri 2014-10-09 12:05:48
答
行,所以我现在明白this
工作,什么bind()
如何做感谢limelightscomment。
这是我对它的理解:this
不能代表当前函数对象,但它调用该函数的对象,我们可以绑定指定上下文来确保该函数调用适当的this
对象。
是否这样? http://jsbin.com/qeqipekudanu/1/ – 2014-10-09 10:28:49
是的这项工作,我想是时候阅读一些关于'bind()'的文档:) – kigiri 2014-10-09 10:39:44