为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯王 2019-06-09 11:50:19
一个闭包,封装一些方法;(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事件
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

你返回的webscoket实例对象已经包含了close方法了,没必要对MSocket对象扩展close方法,刚刚查了MDN确认了。
在你调用MSocket的时候,直接ws=MSocket()即可,
个人观点,欢迎继续讨论
                            
查看完整回答
反对 回复 2019-06-09
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

close方法实在构造函数的原型上,调用应该在原型上调用或者实例化后直接调用
WebSocket.prototype.close
或者
letws=newWebSocket();
ws.close
                            
查看完整回答
反对 回复 2019-06-09
  • 2 回答
  • 0 关注
  • 285 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信