当前位置:首页 > JavaScript

js 实现重载

2026-04-06 14:47:41JavaScript

方法一:利用参数数量和类型判断实现重载

JavaScript本身不支持传统意义上的函数重载,但可以通过检查参数的数量或类型来模拟重载行为。

function example() {
  if (arguments.length === 0) {
    // 无参数情况
    return "No arguments";
  }
  if (arguments.length === 1 && typeof arguments[0] === "string") {
    // 单个字符串参数情况
    return "String: " + arguments[0];
  }
  if (arguments.length === 2 && typeof arguments[0] === "number") {
    // 两个数字参数情况
    return arguments[0] + arguments[1];
  }
  // 其他情况
  return "Default case";
}

方法二:使用对象参数实现灵活重载

通过接收一个配置对象作为参数,可以更灵活地处理不同参数组合。

js 实现重载

function example(options) {
  const defaults = {
    name: "",
    age: 0,
    callback: function() {}
  };

  const settings = {...defaults, ...options};

  if (settings.callback) {
    settings.callback();
  }

  return `Name: ${settings.name}, Age: ${settings.age}`;
}

方法三:利用闭包实现方法链式重载

通过返回对象实现链式调用,每个方法可以看作是一个重载版本。

js 实现重载

function Calculator() {
  let result = 0;

  return {
    add: function() {
      for (let i = 0; i < arguments.length; i++) {
        result += arguments[i];
      }
      return this;
    },
    subtract: function() {
      for (let i = 0; i < arguments.length; i++) {
        result -= arguments[i];
      }
      return this;
    },
    value: function() {
      return result;
    }
  };
}

const calc = new Calculator();
calc.add(1, 2).subtract(3).value(); // 0

方法四:使用ES6默认参数和剩余参数

ES6的语法特性可以更优雅地实现类似重载的效果。

function example(param1 = "default", ...rest) {
  if (rest.length > 0) {
    return `First: ${param1}, Rest: ${rest.join(", ")}`;
  }
  return `Single: ${param1}`;
}

方法五:策略模式实现重载

将不同参数情况的处理逻辑封装为策略对象。

const strategies = {
  noArgs: function() {
    return "No arguments";
  },
  singleString: function(arg) {
    return "String: " + arg;
  },
  twoNumbers: function(arg1, arg2) {
    return arg1 + arg2;
  }
};

function example() {
  const args = Array.from(arguments);

  if (args.length === 0) {
    return strategies.noArgs();
  }
  if (args.length === 1 && typeof args[0] === "string") {
    return strategies.singleString(args[0]);
  }
  if (args.length === 2 && typeof args[0] === "number") {
    return strategies.twoNumbers(args[0], args[1]);
  }

  return "Default case";
}

这些方法展示了在JavaScript中模拟函数重载的不同技术,每种方法适用于不同的场景和需求。

标签: js
分享给朋友:

相关文章

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…