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

小白,请教各位大佬!自定义对象上拷贝原生WebSocket对象的方法和事件谢谢哈~

小白,请教各位大佬!自定义对象上拷贝原生WebSocket对象的方法和事件谢谢哈~

手掌心 2019-12-02 08:04:31
一个闭包,封装一些方法;(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 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

你返回的webscoket实例对象已经包含了close方法了,没必要对MSocket对象扩展close方法,刚刚查了MDN确认了。

在你调用MSocket的时候,直接ws=MSocket()即可,个人观点,欢迎继续讨论


查看完整回答
反对 回复 2019-12-03
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

close方法实在构造函数的原型上,调用应该在原型上调用或者实例化后直接调用

WebSocket.prototype.close或者letws=newWebSocket();ws.close


查看完整回答
反对 回复 2019-12-03
  • 2 回答
  • 0 关注
  • 265 浏览
慕课专栏
更多

添加回答

举报

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