设计模式《参数前移/重载》

if (typeof args == 'function') {
    cb = args;
    args = {};
}

什么意思?

这段代码的目的是重载函数参数(参数归一化),提供更灵活的 API 调用方式。

具体来说,在 bridge.call(method, args, cb) 这个方法定义中,正常期望传入三个参数(方法名、参数对象、回调函数)。但为了让前端在调用时不那么啰嗦,加入了这段判断。

它的意思是:

如果你在调用时,第二个参数 args 并没有传一个对象,而是直接传了一个函数 (function),那么系统就认为你没有要传给原生的参数,你只是想传一个回调函数

因此代码执行:

  1. cb = args; :把你传在第二个位置的函数,赋值给正确的回调变量 cb
  2. args = {}; :把原本因为占位传错的 args 重置为空对象,防止后续代码处理参数时报错。

举个实际调用的例子:

原本严格的调用方式(必须传空对象):

// 获取设备信息,不需要传参数,只需要回调
bridge.call('getDeviceInfo', {}, function(res) {
    console.log(res);
});

有了这段代码后,你可以简写成这样(省略空对象,非常方便):

// 直接把回调函数写在第二个参数的位置
bridge.call('getDeviceInfo', function(res) {
    console.log(res);
});

这种“参数前移/重载”的设计模式在现代 JavaScript 库(如 jQuery、Node.js 核心库)中非常常见,目的是为了提升开发者的使用体验。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容