如何将DRY应用于此JavaScript对象?

时间:2011-10-11 06:55:14

标签: javascript jquery dry javascript-objects

我有一个像这样的JavaScript对象,它负责管理消息:

var _message = {
            removeMessages: function () {
                messageContainer.removeClass(errorClass)
                .removeClass(infoClass)
                .removeClass(successClass)
                .text('');
            },
            info: function (text) {
                this.removeMessages();
                messageContainer.addClass(infoClass).text(text);
            },
            error: function (text) {
                this.removeMessages();
                messageContainer.addClass(errorClass).text(text);
            },
            success: function (text) {
                this.removeMessages();
                messageContainer.addClass(successClass).text(text);
            }
        };

已经调用了jQuery的removeClass三次。已经调用了三次this.removeMessages();。我曾三次使用messageContainer.text(text);来显示文字。

注意:messageContainer是一个jQuery对象,我将此对象用作_message.info('some information');

1 个答案:

答案 0 :(得分:3)

您可以使用removeClass一次删除多个班级:

  

<强> .removeClass( [className] )
  要从每个匹配元素的class属性中删除 classNameOne 或更多以空格分隔的类。

所以你可以这样做:

removeMessages: function () {
    messageContainer
        .removeClass(errorClass + ' ' + infoClass + ' ' + successClass)
        .text('');
}

你也可以用一个小帮手来清理其他三个人:

_helper: function(text, cls) {
    this.removeMessages();
    messageContainer.addClass(cls).text(text);
},
info: function (text) {
    this._helper(text, infoClass);
},
error: function (text) {
    this._helper(text, errorClass);
},
success: function (text) {
    this._helper(text, successClass);
}