我正在编写一个函数,它接受一个单词对象数组,然后修改单词对象。我希望用户也能够在单个单词对象上使用该函数,我想知道哪种方法更好:
a) 让函数类型检查输入的参数是对象还是数组,并做出相应的响应b) 有两个函数,一个用于obj,另一个用于数组。
//method 1: accepts either a obj or an array
function wordChecker(element) {
if (typeof element === 'object') {
wordCheckerHelperHelper([element]);
} else if(element instanceof Array) {
wordCheckerHelper(element);
} else throw new Error('invalid argument');
};
function wordCheckerHelper(arr) {
//do something
};
//method 2: separate methods, but the wordCheckerObj method is just a wrapper around the wordCheckerArr method
function wordCheckerArr(arr) {
//do something
};
function wordCheckerObj(obj) {
if(typeof obj !== 'object') throw new Error('invalid argument');
workCheckerArr([obj]);
}
JavaScript库倾向于使用第一种方法,即接受任何类型的参数并尝试以某种方式处理它。我想这主要是因为JavaScript的动态特性,用户通常不知道(或不确定)他们从其他系统/库接收到的对象类型。JavaScript中的类型检测可能非常乏味,并且用户代码最终将是大量的if
s和switch
es,因此这种类型的检查可以更好地封装在库级别上。