使用文字表示法扩展名称空间中的对象

时间:2014-05-07 09:27:37

标签: javascript namespaces object-literal

我有一个页面,其中包含一些元素,如输入和选择框,它们各自需要添加功能来控制它们的特定行为。

我的代码目前是:

var mpp_ui = {
    itemList : document.getElementById('mpp_itemlist')
};

mpp_ui.itemList.clear = function(){
    while(this.length > 0){
        this.remove(0);
    }
};

其中mpp_ui用作名称空间,其中包含需要分配给它们的函数的所有元素,而mpp_ui.itemList是HTML select元素。

如果可能的话我想避免在每个函数语句中输入mp​​p_ui。我想声明这样的函数(部分伪代码,因为我不太知道如何去做):

var mpp_ui = {
    itemList : {
        DEFINE IT AS document.getElementById('mpp_itemlist').
        Then extend it with functions like so:
        clear : function(){
            while(this.length > 0){
                this.remove(0);
            }
        }
    }
}

或者,如果上述情况不可能:

var mpp_ui = {
    itemList : document.getElementById('mpp_itemlist'),
    itemList.clear : function(){
        while(this.length > 0){
            this.remove(0);
        }
    }
}

最后一个代码是我尝试的第一件事,但它在SyntaxError: Unexpected token .定义的行上给了itemList.clear

1 个答案:

答案 0 :(得分:0)

在通过许多选项挖掘之后,最接近我想要的格式是通过声明命名空间中的元素然后使用所需的函数扩展它们,我使用underscore.js。结果:

mpp_ui = {
    itemList : document.getElementById('mpp_itemlist')
};
_(mpp_ui.itemList).extend({
    clear : function(){
        while(this.length > 0){
            this.remove(0);
        }
    }
});