如何让我自己的JavaScript函数具有必需的参数?

时间:2013-09-11 18:09:54

标签: javascript intellij-idea coffeescript

当我在intellij想法中编写javascript时,我可以检查我正在调用的函数的参数,它会说像

Optional arguments

我不确定这是否是intellij功能,它知道标准库,或者它是否是一个javascript功能,允许您将参数标记为可选/必需。无论哪种方式,我想学习如何使用可选/必需参数创建自己的函数。我所知道的是可选的似乎是默认值,因为Intellij说我的所有函数的参数都是可选的。


从我看到的答案中,听起来这是一个Intellij功能。但是,现在我想知道Intellij是否为我提供了将自己的函数参数标记为可选/必需的方法。

5 个答案:

答案 0 :(得分:6)

编辑:如果您使用类似TypeScript的内容,则可以进行此类检查。

如果没有字面上检查预期的参数,这在JavaScript中是不可能的(如VoronoiPotato已经显示的那样)。

每个JavaScript函数都可以访问arguments变量。您可以检查它是否包含任何参数,以及它们是否是您期望的类型。

var foo = func(a, b) {

  if(arguments.length < 2 )
     Throw("error");

  if(typeof a !== '<expectedtype>' && typeof b !== '<expectedtype>')
     Throw("error");
};

答案 1 :(得分:5)

我有另一个主意。我在某篇文章中找到了。

创建一个名为 required();

的函数
function required(varName) {
    throw new Error(`${varName} is required. `);
}

当需要一个参数时,就可以这样使用:

fnName(a=required("a"), b = required("b")){
    ....
    ...
}

代码示例:

function required(varName) {
    throw new Error(`${varName} is required. `);
}

function sumOfTwoValues(a= required("a"), b = required("b")){
   return a+b
}

console.log("sumOfTwoValues(1,2): ", sumOfTwoValues(1,2));
console.log("sumOfTwoValues(1): ", sumOfTwoValues(1));

答案 2 :(得分:4)

function foo(value1, value2){
/**
* @param myParam1 [Required]
* @param myParam2
*/
  if(value1 == undefined){
    throw('Value1 is a required field for function foo');
  }
}

答案 3 :(得分:4)

如果您只关心代码完成位,那么您可以使用JSDoc comments在IntelliJ环境中获取该代码。这不会影响您的代码,因为其他人已经指出,如果参数是可选的,您无法指定JavaScript解释器,但编辑器将从注释中获取信息并在您键入时显示它。这样你自己的功能就像库函数一样显示。

答案 4 :(得分:1)

使用ES6 default function parameters,您可以实现Required FLAG,当调用带有必需参数的函数而没有提供这些参数时,它将引发错误并停止执行。

// set a getter to a custom global identifier (P_REQUIRED)
Object.defineProperty( window , 'P_REQUIRED'  , {
  get : ()=>{
    let err     = new Error('');
    let trace   = err.stack.split('\n');
    let msg     = '';
    for(let i=2;i<trace.length;i++)  msg+=trace[i]+'\n';
    throw 'Error : Missing required parameter\n' + msg; 
  },
  configurable : false
});


// declare a function with a mandatory parameter
function myFunc( myParam = P_REQUIRED ){
  /* some code here */
}

// call the function without the parameters
myFunc();
  
// Error is thrown!

基本上,当在函数调用中未指定任何值时,解释器会将P_REQUIRED分配给参数。这将触发getter处理程序,该处理程序仅准备并引发新的Error。

这是一个干净的跨浏览器解决方案,可以在任何现代环境中运行(需要ES6)。

我实际上将其打包为javascript模块。
+ info:https://github.com/colxi/P_REQUIRED