2015-07-21 4 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); 
    }); 
} 

И затем Voip расширен с наследованием EventEmitter. Могу ли я полностью избавиться от этой строки и сохранить такую ​​же функциональность? Я вообще не использую 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 один раз при прослушивании события вызова и второй раз в функции callOther. И для наследования EventEmitter мне интересно, могу ли я изменить код таким образом, что мне не нужна эта строка, и все еще работает.

+0

В вашем событии 'call' ли ваша ошибка' otherCall' выдает ошибку? Тот же вопрос для функции 'callOther'. Пробовали ли вы регистрировать то, что '' это внутри события 'call', и что' self' находится внутри 'callOther'. Это может быть проблема с охватом. –

+0

@TahirAhmed Да, 'otherCall' не может быть вызван в обоих случаях в этой строке. Кроме того, 'self' внутри' callOther' является объектом Voip, а событие 'this' внутри вызова не определено. – 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)' inside 'otherCall'. Он говорит, что не может прочитать свойство' on' неопределенного. – Prototype

+0

Проблема заключалась в том, что поток не был принят в нужный момент. был вызван до того, как поток был даже включен. – Prototype

Смежные вопросы