编辑:我发现这个有趣的库,它看起来像它可以做的正是我一直在底部的描述:https://github.com/philbooth/check-types.jsJavascript:如何确保参数具有特定的界面?
看起来你可以通过调用check.quacksLike做到这一点。
我是相当新的使用JavaScript和我爱它提供的电量,但有时实在是太灵活了我的理智来处理。我想要一个简单的方法来强制执行一些参数来尊重特定的接口。
这里有一个简单的例子方法,突出我的问题:
var execute = function(args)
{
executor.execute(args);
}
假设执行人预计args
有一个叫cmd
属性。如果未定义,则当程序尝试引用cmd
,但它是undefined
时,可能会在另一级出现错误。这种错误会比在此方法中明确强制执行cmd
的存在更麻烦。执行者甚至可能会认为args
有一个叫做getExecutionContext()
的函数,它会被传递一下。我能想象更复杂的方案,其中的调试将很快成为通过功能跟踪调用,看看那里的论点首先通过一个噩梦
我也不想要做的东西线:
var execute = function(args)
{
if(args.cmd === undefined || args.getExecutionContext === undefined ||
typeof args.getExecutionContext !== 'function')
throw new Error("args not setup correctly");
executor.execute(args);
}
这对每个有参数的函数都需要大量的维护,特别是对于复杂的参数。我宁愿能够指定一个接口,并以某种方式强制执行一个合约,告诉javascript我期望与此接口匹配的输入。
也许是这样的:
var baseCommand =
{
cmd: '',
getExecutionContext: function(){}
};
var execute = function(args)
{
enforce(args, baseCommand); //throws an error if args does not honor
//baseCommand's properties
executor.execute(args);
}
然后我可以重复使用这些接口之间我不同的功能,并定义扩展它们传递到我的功能,而无需担心拼写错误的属性名称或传递错误的参数对象。关于如何实现这一点,或者我可以利用现有实现的任何想法?
虽然这不是一个真正的责任问题,它更像是预防性护理。我都在设计和遵循标准来保持结构化代码,但代码总是容易出错。不可避免的是你会犯错,而当你这样做时,我希望它更容易调试。 – Alex
@Alex我同意您的声明JavaScript可能不安全。团队中的人员可能会调用构造函数,传递错误的类型参数,设置或删除私有变量以及其他一些危险。您不能剥夺JavaScript获得这些检查的灵活性,但您可以使用工具编译代码以进行类型检查。 – HMR