有大佬遇到过这个问题吗:自定义对象上拷贝原生WebSocket对象的方法和事件跪求!

一个闭包,封装一些方法
;
(function(window){
varinitObj=null;
varajaxSuccessResult='';
vartimer=null;
/**
*判断是否支持websocket
*@param
*@returns{boolean}
*/
functionisSupported(){
if(window.WebSocket&&(typeofWebSocket!='undefined')){
returntrue;
}
returnfalse;
}
...太长,省略
functionMSocket(options){
if(!isSupported()){
//polling获取数据
timer=setInterval(
function(){
ajax({
url:options.http,
data:options.ajaxData,
type:options.type,
})
}
,3000);
}else{
returnnewWebSocket(options.http);
}
}
//MSocket.prototype.onmessage=function(callback){
////传递数据,外面接收
//callback(ajaxSuccessResult);
//}
//此处用websocket原生方法赋值给MSocket对象上;但是无效.
MSocket.prototype.close=function(){
returnWebSocket.close();
};
console.log(MSocket.prototype,'MSocket');
if(typeofmodule!='undefined'&&module.exports){
module.exports=MSocket;
}elseif(typeofdefine=='function'&&define.amd){
define(function(){
returnMSocket;
});
}else{
window.MSocket=MSocket;
}
}(window));
vue中外部调用
methods:{
sendMessage(){
this.socketCase.send(this.inputData);
this.inputData='';
},
closeMessage(){
//提示Cannotreadproperty'close'ofnull"
this.socketCase.close();
this.$toast('已关闭连接');
},
},
mounted(){
//实例化一个MSocket对象,传入一些参数
this.socketCase=newMSocket({
ws:this.url,
http:this.httpurl,
ajaxData:{},
type:'POST',
...
});
//原生事件
this.socketCase.onmessage=function(event){
console.log(event,'onmessage');
};
//获取到的window.WebSocket如下,所有的方法都挂在原型中。
ƒWebSocket(){[nativecode]}
我的疑问:即:如何在一个自定义对象上赋值原生WebSocket对象事件。比如实现监听onmessage事件
慕斯王
浏览 286回答 2
2回答

弑天下

你返回的webscoket实例对象已经包含了close方法了,没必要对MSocket对象扩展close方法,刚刚查了MDN确认了。在你调用MSocket的时候,直接ws=MSocket()即可,个人观点,欢迎继续讨论

呼啦一阵风

close方法实在构造函数的原型上,调用应该在原型上调用或者实例化后直接调用WebSocket.prototype.close或者letws=newWebSocket();ws.close
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript