当前位置:首页 > 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实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…