ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

属性封装的重要性

2022-08-12 12:02:41  阅读:149  来源: 互联网

标签:set 封装 newVal connected 重要性 赋值 连接 属性


属性封装:需要暴露给外界使用的对象,应该提供get和set方法,不允许直接操作变量值
之前我一直不理解,在get和set中没有别的逻辑的时候,这与直接操作变量值的区别在哪里

场景

我维护的连接管理sdk,对外提供一个connected属性,标识当前连接是否建立,同时sdk内部逻辑中也依赖这个属性执行逻辑
在我的假想中,这个属性我给到使用者用来判断连接是否建立,他可以执行重连操作

问题

最近,业务端报障,连接管理一直处于重连状态,后续的消息都没法传输
我在chrome里debug,connected属性连接成功后赋值为true,一段时间就会变成false,导致后续逻辑执行混乱

过程

百思不得其解,我的代码中只有对象初始化时和连接关闭才会赋值false,甚至我都一度怀疑是js事件循环初始化代码未执行完成就去执行连接函数,然后回来继续初始化赋值false,求证js专业选手,js并不会这样做
我意识到有人改了connected属性,可是我没有证据...

思考

如果connected属性我封装了set方法,这样我至少可以在set方法里打一个断点或者加一行日志,确定属性被修改了几次,以致找到属性是在哪里修改的

后续

查证下来,业务端这里为了可以监测connected属性变化,代理了这个属性,初始值这里没有处理好,执行了赋值操作

Object.defineProperty(provider, 'wsconnected', {
    configurable:true,
    get() {
      return wsStatus;
    },
    set(newVal){
      if (newVal !== wsStatus) {
        wsStatus = newVal;
        setWSConnected(newVal);
      }
    },
});

标签:set,封装,newVal,connected,重要性,赋值,连接,属性
来源: https://www.cnblogs.com/snowsteps/p/16579400.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有