You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅传一个参数让expectNumber自动获取参数名并实现原有功能?

简化expectNumber函数的参数传递方案

完全可以只传一个参数实现相同功能,核心思路是利用对象字面量的键名自动对应变量名,不用手动传入参数名。以下是两种直接可用的改造方案:

方案一:极简对象参数版

直接修改函数,让它接收一个包含目标变量的对象,内部自动提取变量名和值:

function expectNumber(obj) {
  // 从对象中取出第一个键值对(确保只传一个变量的对象)
  const [varName] = Object.keys(obj);
  const variable = obj[varName];
  
  if (Number.isNaN(variable)) {
    throw new Error(`参数 ${varName} 不是有效数字`);
  }
}

// 调用方式(只传一个参数)
expectNumber({ secWCanvas });

方案二:兼容旧调用的重载版

如果需要兼容原来的双参数调用,同时支持单参数模式,可以加个参数判断:

function expectNumber(arg1, arg2) {
  let variable, varName;
  
  if (arg2 === undefined) {
    // 单参数模式:arg1是包含变量的对象
    const [key] = Object.keys(arg1);
    variable = arg1[key];
    varName = key;
  } else {
    // 兼容原来的双参数调用
    variable = arg1;
    varName = arg2;
  }
  
  if (Number.isNaN(variable)) {
    throw new Error(`参数 ${varName} 不是有效数字`);
  }
}

// 两种调用都支持
expectNumber({ secWCanvas }); // 新的单参数调用
expectNumber(secWCanvas, Object.keys({secWCanvas})[0]); // 旧的双参数调用

注意点

  • 单参数调用时必须传对象字面量(比如{secWCanvas}),不能直接传变量本身,否则函数无法获取变量名。
  • 如果需要同时校验多个变量,可以扩展函数支持多键对象,但你的需求是单变量校验,上面的方案足够。

内容的提问来源于stack exchange,提问作者Leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 21:00:12