当前位置:首页 > JavaScript

js 实现重载

2026-03-14 21:04:21JavaScript

JavaScript 本身不支持传统意义上的方法重载(即同名方法根据参数类型或数量不同实现不同功能),但可以通过以下方式模拟类似效果:

利用参数数量和类型判断

通过检查 arguments 对象或剩余参数,动态决定函数行为:

js 实现重载

function overloadExample() {
  if (arguments.length === 1) {
    console.log('单参数版本:', arguments[0]);
  } else if (arguments.length === 2) {
    console.log('双参数版本:', arguments[0], arguments[1]);
  }
}
overloadExample(10);       // 输出: 单参数版本: 10
overloadExample(5, 'abc'); // 输出: 双参数版本: 5 abc

使用对象参数统一处理

通过配置对象参数实现灵活的参数传递:

js 实现重载

function configurableFunc(options) {
  const { param1, param2, callback } = options || {};
  if (callback) {
    callback(param1 + param2);
  } else {
    return param1 * param2;
  }
}
configurableFunc({ param1: 2, param2: 3 }); // 返回 6
configurableFunc({ param1: 1, param2: 2, callback: console.log }); // 输出 3

利用默认参数和类型检查

ES6+环境下可通过默认参数和类型判断实现:

function typedOverload(a, b = 0, c) {
  if (typeof a === 'string') {
    return a.repeat(b);
  }
  if (c instanceof Array) {
    return c.map(x => x * a + b);
  }
  return a + b;
}
typedOverload(2, 3);          // 返回 5
typedOverload('Hi', 3);       // 返回 "HiHiHi"
typedOverload(2, 1, [4,5,6]); // 返回 [9, 11, 13]

通过函数工厂创建重载

高阶函数可生成具有不同行为的函数组:

function createOverload() {
  const handlers = new Map();
  function overload(...args) {
    const key = args.map(arg => typeof arg).join('|');
    const handler = handlers.get(key);
    if (handler) return handler.apply(this, args);
    throw new Error('No matching overload');
  }
  overload.addImpl = function(types, fn) {
    handlers.set(types.join('|'), fn);
  };
  return overload;
}

const smartFunc = createOverload();
smartFunc.addImpl(['number'], n => n * 2);
smartFunc.addImpl(['string'], s => s.toUpperCase());
smartFunc(4);   // 返回 8
smartFunc('ab'); // 返回 "AB"

这些方法各有适用场景,选择时需考虑代码可读性、维护成本和实际需求复杂度。对象参数法适合参数较多的情况,而类型判断法则在需要严格区分参数类型时更有效。

标签: js
分享给朋友:

相关文章

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…