【问题标题】:function with options - should I use $.extend() to make code less verbose? [closed]带选项的函数 - 我应该使用 $.extend() 来使代码不那么冗长吗? [关闭]
【发布时间】:2013-11-19 22:11:37
【问题描述】:

我正在构建这样的状态指示器:

G = { status : function(type, msg) {
    var opts = {
        'plain': ['#ccc', '#000'],
            'alert': ['#900', '#fff']
    }
    var $el = $('<div id="status"></div>')
        .css({
        'background': opts[type][0],
            'color': opts[type][1]
    })
        .html(msg)
        .appendTo('body');
    return $el;
}}

我这样称呼它:

G.status('plain','hello'); //makes a black text on grey background message
G.status('alert','ouch'); //makes a white text on red background message

问题: 除了 CSS,我可能有更复杂的参数,比如各种选项的对象,其中一些可能是可选的。有没有更优雅的方式来做到这一点?我有一种感觉,我并没有真正使用 javascript 和 jquery 来发挥其最大潜力,并且使代码过于复杂。

想一想,我想这可能已经在其他地方问过,但我还没有找到。

【问题讨论】:

  • 这个问题似乎跑题了,因为它属于Code Review
  • 我并不是要审查这个特殊的 sn-p。我正在尝试了解如何使用可选参数更好地构造函数。
  • 我认为 $.extend 非常适合您描述的情况,即您有许多要传递给构造函数的可选参数。可能值得更新您的示例,使其更接近您的描述。

标签: javascript jquery css oop extend


【解决方案1】:

我可能会使用类。一个优点是您可以添加任意数量的状态类型,而无需更新创建它们的函数。只需将样式添加到您的 CSS 即可。

// type corresponds to a class in my CSS
function status(type, msg) {
    var $el = $('<div id="status"></div>')
        .addClass(type)
        .html(msg)
        .appendTo('body');
    return $el;
}

status('plain', 'hello');

CSS:

.plain {
    background: #ccc;
    color: #000;
}

【讨论】:

  • …without having to edit your JavaScript。调用仍然必须修改,CSS 也必须修改。但这个想法很好。
  • 公平点。我已经更新了答案。
  • 感谢您的想法。为了清楚起见,我想当我尝试简化我的代码示例时会发生这种情况。我实际上正在构建一些更复杂的东西,传统上会作为一个 jquery 扩展来做,但我了解到浏览器中的垃圾收集很糟糕,所以我尝试构建一个对象类(?,我不确定我使用正确的命名法)所以我可以更好地摧毁它。无论如何,我真的只是想知道做可选函数参数的最佳方法是什么。忘记它是 CSS,它只是为了说明。谢谢。
猜你喜欢
  • 2014-01-17
  • 2011-12-26
  • 2010-09-09
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多