API-设计

js 类库升级兼容,暴露出来的东西,尽量不要变

  • 模块名、类名、方法名,保持不变
  • 已有参数尽量不变,如果发生变化可以在代码中做非空判断、类型转换、判断 version 等方式来兼容老版本
  • 新增参数非必填,可以提供默认值
  • 返回值预留出扩展空间
  • 多做一些非空判断,报错信息
  • 不到万不得已,不要写新的方法替代老的方法

类库编写规范

  • 注释清晰,与代码一致
  • 函数顶部,先进行参数校验、格式转换
  • 所有方法都写上 @since,表示从哪个版本支持的

constructor 中异步操作

constructor 的作用是返回一个对像实例,如果加了 async 就变成返回一个 promise 了,所以这个方法行不通,因为做不到既返回一个 promise 又返回一个 object 实例。

如果一定要进行异步操作,可以考虑使用静态方法,在异步操作结束后返回一个自定义的对象。但是因为这个静态方法是异步的,在调用处还要考虑对异步操作的处理。

这种操作可以参考 React 的官方文档,建议请求接口数据不要放在 constructor 中,而是放在 componentDidMount 中。

区别类方法和静态方法

对于变量,只要数据在对象中都是不同的,就是对象中的特有数据,必须存储在对象中,是非静态的;如果是相同的数据,对象不需要做修改,只需要用即可,不需要存储在对象中,定义成静态的。

函数是否用静态的就参考一点,就是该函数的功能能否访问到对象的特有数据。简单点说从源码看该功能是否要访问非静态的成员变量,如果需要,该功能是非静态的,如果不需就可以定义成静态函数。