我在回調中獲取對使用 原型模式實現的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,所以我不知道如果我只是錯過了一些東西,或者如果我需要採取不同的方法 完全。我將不勝感激任何幫助和/或方向。
你錯了。它是'msgBusConnectCallback.apply(this)' – slebetman 2014-10-09 03:47:17
slebetman的解決方案 - 在回調中,現在指向我的對象。但是,回調的err參數總是未定義的,即使它不應該是這樣。有任何想法嗎? – Pathfinder 2014-10-09 13:42:27
@Pathfinder'msgBusConnectCallback.apply(this,[err])' – monkeyinsight 2014-10-09 17:59:51