Javascript:带有方法的对象与带有开关的函数

标签 javascript

我对 JS 还比较陌生,正在尝试确定这两个选项之一是否比另一个更有优势。

我经常使用数组,并且希望有一个多功能工具可以在给定时间对它们执行任何我想要的操作。

这是我正在尝试做出决定的两个选项:

  const arr = {
    arrCreate: function(v){
      if (!Array.isArray(v)) {
        v = [v];
      };
      return v;
    },

    arrString: function(v){
      v = v.length === 1 ? v.toString() : v;
      return v;
    },

    arrShift: function(v){
      if (v.length > 1) {
        v.shift();
      };
      return v;
    };
  };

  var array = arr.arrString(array);

对比。

    function arr(v,v2){
        switch(v2){
          case 'array':
            if (!Array.isArray(v)) {
              v = [v]
            };
            break;

          case 'string':
            v = v.length === 1 ? v.toString() : v;
            break;

          case 'shift':
            if (v.length > 1){
              v.shift()
            };
            break;

            default:
        }
      return v;
    }
    var array = arr(array,"string");

这两个在功能上是相同的(AFAIK),但我猜测其中一个比另一个具有我不知道的性能优势。哪个会是首选,为什么?

最佳答案

开关

  • 难以阅读(根据参数执行许多不相关的任务,故意违反 single responsibility principle)
  • 更难编写(只需尝试忘记中断)
  • 测试起来稍微困难一些(确保其完全覆盖)
  • 调用起来有点笨拙(thing.do(thing,args) 而不是 thing.dothing(args))。

如果您这样做只是因为 return v;,您可以使用箭头函数,例如

v => Array.isArray(v) ? v : [v]
v => v.length === 1 ? v.toString() : v

(第三个需要返回)

关于Javascript:带有方法的对象与带有开关的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59722694/

相关文章:

javascript - 谷歌浏览器扩展 : how to inject script immediately after page reload?

javascript - 尝试发送组合击键 (Shift RightArrow) 或触发事件 JQ 2.0.3

javascript - 我应该将字符串值存储在变量中还是作为隐藏的输入值

javascript - 无法将 ckeditor 4 选择移至开头

Javascript,通过函数的条件变量

php - 如何在php中获取javascript post变量?

javascript - 如何摆脱正则表达式结果中的 "undefined"?

javascript - 从 AngularJS 中的 JSON 数组获取值

javascript - Spring Boot + Angular 应用程序

javascript - 禁用 JSHint 警告 : Expected an assignment or function call and instead saw an expression