2014-10-09 113 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對象。

相關問題