在处理多个参数类型时,"overload"一个函数还是有两个单独的函数更好



我正在编写一个函数,它接受一个单词对象数组,然后修改单词对象。我希望用户也能够在单个单词对象上使用该函数,我想知道哪种方法更好:

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中的类型检测可能非常乏味,并且用户代码最终将是大量的ifs和switches,因此这种类型的检查可以更好地封装在库级别上。

最新更新