2014-10-09 47 views
1

我在回調中獲取對使用 原型模式實現的JavaScript對象的引用時出現問題。回調來自我在我的對象中使用的第三方組件 。第三方對象連接到消息總線。Javascript - 如何保存對「this」的引用以訪問使用原型模式的命名函數回調

下面的僞代碼顯示了我是如何開始的(這樣做的真正的代碼工作)

var mb = require('MsgBus') 

TestClass = function() { 
    this.messagebus = new mb.MsgBus(); 
    this.messagebus.connect(function(err) { 
     if(err) 
     console.log("Error connecting"); 
     else 
     console.log("Connected"); 
    }); 
} 

但後來我想有它自動重試連接如果回調報告 錯誤。如果 表示「this.messagebus.connection」的if(err)塊因爲我必須爲該連接回調添加另一個匿名 方法,我不能只是放置另一行,它只會繼續。所以,我想 打出回調邏輯來命名函數這樣

var mb = require('MsgBus') 

TestClass = function() { 
    this.messagebus = new mb.MsgBus(); 
    this.messagebus.connect(msgBusConnectCallback); 
} 

function msgBusConnectCallback(err) { 
     if(err) 
     this???.messagebus.connect(msgBusConnectCallback); 
     else 
     console.log("Connected"); 
    }); 
} 

回調函數被調用,但我無法弄清楚如何獲得參考 對象調用重新連接。我也試圖讓回調一個 原型函數的對象,仍然沒有參考。我無法在全局範圍內創建一個變量 來維護「this」,因爲此類的用戶可能會創建該類的多個實例 。我相當新的JavaScript,所以我不知道如果我只是錯過了一些東西,或者如果我需要採取不同的方法 完全。我將不勝感激任何幫助和/或方向。

回答

0

我終於想通了答案,正確的語法是 this.messagebus.connect(msgBusConnectCallback.bind(本));

3
this.messagebus.connect.apply(this, [msgBusConnectCallback]); 
+1

你錯了。它是'msgBusConnectCallback.apply(this)' – slebetman 2014-10-09 03:47:17

+0

slebetman的解決方案 - 在回調中,現在指向我的對象。但是,回調的err參數總是未定義的,即使它不應該是這樣。有任何想法嗎? – Pathfinder 2014-10-09 13:42:27

+0

@Pathfinder'msgBusConnectCallback.apply(this,[err])' – monkeyinsight 2014-10-09 17:59:51

相關問題