`this`返回父对象的值而不是当前函数

时间:2014-10-09 10:15:21

标签: javascript this

我不确定我是接近这种最好的方式,但我真的很想知道为什么会发生这种情况。

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工作,那就太棒了!

2 个答案:

答案 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);