2015-07-21 107 views
0

我有一個快速問題。我正在與peerjs進行視頻聊天,並收到該函數未定義的錯誤。下面是代碼:如何調用回調函數中的繼承函數

主要構造VoIP是被稱爲在其他文件中像

var voip = new Voip(); 

這是函數:

function Voip(options) { 
var self = this; 

options = options ||  {}; 

var allOptions = _.extend({ 
secure: true, 
debug: 3 
}, options); 

this.peerjs = new Peer(allOptions); 

第一個問題就在這裏。我怎麼能通過監聽呼叫事件函數otherCall在底部來調用otherCall裏面的回調函數。現在用this.otherCall寫出來,但這不起作用。每當我收到通話事件並接聽電話時,我都會想去這個功能。

this.peerjs.on('call', function(call){ 
call.answer(window.localStream); 
this.otherCall(call); 
    }); 
} 

然後通過繼承EventEmitter來擴展Voip。我可以完全擺脫這條線,仍然保持相同的功能?我根本不使用EventEmitter,而是在我幫助的代碼中使用它。

Voip.prototype = _.extend(EventEmitter.prototype, { 

同樣在這裏,self.otherCall不起作用。解決辦法是什麼?

callOther: function(receiverId) { 
var self = this; 
var call = self.peerjs.call(receiverId, window.localStream); 
self.otherCall(call); 
}, 

otherCall: function(call) { 

if (window.existingCall) { 
    window.existingCall.close(); 
    } 

call.on('stream', function(stream){ 
$('iframe').putthecodein....(stream) 
    }); 
    window.existingCall = call; 
} 
}); 

希望我在我的問題中已經很清楚。如果我總結一下我想在調用事件時調用函數otherCall,並且在調用其他函數時第二次調用函數otherCall。並且爲了繼承EventEmitter,我想知道我是否可以通過這種方式修改代碼,使得我不需要這條線,一切仍然正常。

+0

在你的'call'事件中,你的'otherCall'行會拋出錯誤嗎? 'callOther'函數的同樣問題。你有沒有試過記錄'this'在'call'事件中的內容,'callOther'函數中有'self'。這可能是一個範圍問題。 –

+0

@TahirAhmed在該行的兩種情況下都不能調用'otherCall'。 'callOther'裏面的'self'是Voip對象,而'this'裏面的call事件是未定義的。 – Prototype

+0

你的'otherCall'函數是在'Voip'對象中定義的還是隻是一個全局函數? –

回答

2

像這樣使用。它可能工作。

var self = this; 

self.peerjs.on('call', function(call){ 
    call.answer(window.localStream); 
    self.otherCall.call(self, call); 
}); 
+0

它確實工作,調用函數,但然後我有問題在這行'call.on('stream',function(stream)''otherCall'函數內部,它說它不能讀取未定義的屬性'on'。 – Prototype

+0

問題在於沒有正確接收流。在溪流開放之前被調用。 – Prototype