js 类库升级兼容,暴露出来的东西,尽量不要变
- 模块名、类名、方法名,保持不变
- 已有参数尽量不变,如果发生变化可以在代码中做非空判断、类型转换、判断 version 等方式来兼容老版本
- 新增参数非必填,可以提供默认值
- 返回值预留出扩展空间
- 多做一些非空判断,报错信息
- 不到万不得已,不要写新的方法替代老的方法
类库编写规范
- 注释清晰,与代码一致
- 函数顶部,先进行参数校验、格式转换
- 所有方法都写上 @since,表示从哪个版本支持的
constructor 中异步操作
constructor 的作用是返回一个对像实例,如果加了 async 就变成返回一个 promise 了,所以这个方法行不通,因为做不到既返回一个 promise 又返回一个 object 实例。
如果一定要进行异步操作,可以考虑使用静态方法,在异步操作结束后返回一个自定义的对象。但是因为这个静态方法是异步的,在调用处还要考虑对异步操作的处理。
这种操作可以参考 React 的官方文档,建议请求接口数据不要放在 constructor 中,而是放在 componentDidMount 中。
区别类方法和静态方法
对于变量,只要数据在对象中都是不同的,就是对象中的特有数据,必须存储在对象中,是非静态的;如果是相同的数据,对象不需要做修改,只需要用即可,不需要存储在对象中,定义成静态的。
函数是否用静态的就参考一点,就是该函数的功能能否访问到对象的特有数据。简单点说从源码看该功能是否要访问非静态的成员变量,如果需要,该功能是非静态的,如果不需就可以定义成静态函数。