2014-10-09 83 views
0

我不确定我是否接近这个最糟糕的方式,但我真的很想理解为什么会发生这种情况。`这个`返回父对象的值,而不是当前函数

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工作,那将是伟大的!

+1

是否这样? http://jsbin.com/qeqipekudanu/1/ – 2014-10-09 10:28:49

+0

是的这项工作,我想是时候阅读一些关于'bind()'的文档:) – kigiri 2014-10-09 10:39:44

回答

-1

如果您将“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

0

行,所以我现在明白this工作,什么bind()如何做感谢limelightscomment

这是我对它的理解:this不能代表当前函数对象,但它调用该函数的对象,我们可以绑定指定上下文来确保该函数调用适当的this对象。

相关问题