在JavaScript中强制缺少参数

use*_*520 5 javascript

当你在JavaScript中调用函数而你错过了传递一些参数时,没有任何反应.

这使代码更难调试,所以我想改变这种行为.

我已经看到 如何最好地确定一个参数是否没有发送到JavaScript函数, 但我想要一个具有恒定数量的类型代码行的解决方案; 没有为每个功能键入额外的代码.

我已经考虑过通过修改("first-class")Function对象的构造函数,自动为所有函数的代码添加前缀.

JavaScript中更改构造函数的启发 我首先测试了是否可以更改Function对象的构造函数,如下所示:

function Function2 () {
    this.color = "white";
}

Function.prototype = new Function2();
f = new Function();
alert(f.color);
Run Code Online (Sandbox Code Playgroud)

但它警告"未定义"而不是"白色",所以它不起作用,所以我没有进一步探索这种技术.

你知道任何级别的这个问题的解决方案吗?破解JavaScript的内容是可以的,但是关于如何找到缺少的参数的任何其他实用技巧也是可以的.

jba*_*bey 10

如果你的函数需要传递某些参数,你应该特别检查这些参数作为函数验证的一部分.

扩展Function对象并不是最好的主意,因为许多库依赖于未传递的默认参数的行为(例如jQuery没有将任何内容传递给它的作用域undefined变量).

我倾向于使用两种方法:

1)函数需要参数才能工作

var foo = function (requiredParam) {
    if (typeof requiredParam === 'undefined') {
        throw new Error('You must pass requiredParam to function Foo!');
    }

    // solve world hunger here
};
Run Code Online (Sandbox Code Playgroud)

2)一个参数没有通过,但可以默认为某些东西(使用jQuery)

var foo = function (argumentObject) {
    argumentObject = $.extend({
        someArgument1: 'defaultValue1',
        someArgument2: 'defaultValue2'
    }, argumentObject || {});

    // save the world from alien invaders here
};
Run Code Online (Sandbox Code Playgroud)