对象之间不重复代码的提示

Tips for not repeat code between an Object

我仍在构建编程逻辑,我想知道我构建的这段代码是否是 "best possible" 或者你们是否有任何已知的减少它的技术。

这是代码,区别在每个的第二行function():

var Run = {
            closeAll : function(){
                $('body').removeClass('slider-active');
                $('[slider-id]').removeClass('active');
                _.getOverlay.removeClass('active');
                _.getWrapper.css(
                    {
                        'left'      : '',
                        'transform' : ''
                    }
                );
            },

            closeThis : function(){
                $('body').removeClass('slider-active');
                _.getSlider.removeClass('active');
                _.getOverlay.removeClass('active');
                _.getWrapper.css(
                    {
                        'left'      : '',
                        'transform' : ''
                    }
                );
            }
        }

此外,请让我知道我是否不够具体或者是否已经有一个问题(虽然我已经搜索过了)

如果您想关闭 all:

,请调用 close 并传递 true
var Run = {
  close: function(all = false) {
    $('body').removeClass('slider-active');
    (all) ?
       $('[slider-id]').removeClass('active')
       : _.getSlider.removeClass('active');
    _.getOverlay.removeClass('active');
    _.getWrapper.css({
      'left': '',
      'transform': ''
    });
  },
}

三元运算符是执行快速二进制测试的简单方法。为 all 设置了默认值,因此当前滑块受规则影响,所有滑块受例外影响。

您可以通过使用一个函数并使用一个参数来检查是否应切换所有功能来简化它。

代码:

var Run = {
  // Use a boolean parameter
  close : function (all) {
    $('body').removeClass('slider-active');

    // Use the ternary operator
    all ? $('[slider-id]').removeClass('active') : _.getSlider.removeClass('active');

    _.getOverlay.removeClass('active');
    _.getWrapper.css({
      'left'      : '',
      'transform' : ''
    });
  }
}

用法:

  • 全部切换:

    Run.close(true);
    

    Run.close(1);
    
  • 切换一个

    Run.close(false);
    

    Run.close(0);
    

    Run.close();