【发布时间】:2015-07-21 09:49:33
【问题描述】:
我有一个简单的问题。我正在与 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 并监听调用事件 Function 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 一次,第二次在 callOther 函数内调用。而对于继承 EventEmitter 我想知道我是否可以修改代码以使我不需要该行并且一切仍然有效。
【问题讨论】:
-
在您的
call事件中,您的otherCall行是否抛出错误?callOther函数的同样问题。您是否尝试过记录this在call事件中的内容,以及self在callOther函数中的内容。这可能是范围问题。 -
@TahirAhmed 是的
otherCall在该行的两种情况下都不能调用。此外,callOther内的self是 Voip 对象,而this内的通话事件未定义。 -
您的
otherCall函数是在Voip对象中定义的还是只是一个全局函数? -
它在这个
Voip.prototype = _.extend(EventEmitter.prototype, {里面,这就是为什么我问我是否可以摆脱这种扩展和继承以及如何摆脱。因为在那种情况下,我可以像在 Voip 中一样调用这个函数。 -
你有可能以某种方式创建它的 jsFiddle 吗?
标签: javascript jquery inheritance callback peerjs