需要建议...... Javascript OOP /命名空间

时间:2010-08-23 23:08:16

标签: javascript namespaces object

现在我觉得我需要提高我的javascript技能,因为我已经看到我想要实现的东西会变得非常复杂。我现在已经对同一段代码进行了4次迭代,我仍然不确定它是否是最佳方式。

任务:
网页的用户可以向我称之为模块的网页添加不同的表单。每个表单提供不同的用户输入,需要以不同方式处理。可以将相同类型的表单/模块添加到用户喜欢的表单列表中。

我目前的解决方案:
为了使代码更具可读性和单独的功能,我使用了命名空间对象。第一个对象包含一般任务,并通过一个地图引用各个表单,该地图包含多个数组,其中每个数组包含表单的 id 对象的引用需要特别为这种形式执行的功能。


结构看起来或多或少与此相似:

var module_handler = {

    _map  : [],    /* Map {reference_to_obj, id} */

    init: function(){            
        var module = example_module; /* Predefined for this example */
        this.create(module);
    },

    create: function(module) {
        //Store reference to obj id in map
        this._map.push([module,id = this.createID()]);
        module.create(id);
    },

    createID: function(id) {
        //Recursive function to find an available id
    },

    remove: function(id) {

        //Remove from map
        var idx = this._map.indexOf(id);
        if(idx!=-1) this._map.splice(idx, 1);

        //Remove from DOM
        $('#'+id+'').remove();
    }
}

var example_module = {

    create: function(id) {
        //Insert html
        $('#'+id+' > .module_edit_inner').replaceWith("<some html>");
    }
}

现在我的问题出现了; - )
是否需要使用地图的想法?

我的意思是:是不是有更优雅的东西:

var moduleXYZ = new example_module(id)

复制对象并仅引用该表单....更符合逻辑并提高速度? 主要的问题是,现在我需要每次遍历DOM,如果我在任何其他函数上调用例如“example_module.create()或更高版本。使用这种结构我不能像这样的表格像“这个”???


你觉得这方面有什么改进吗?这对我很有帮助!真的,我只是害怕走错路现在看着我将放在这上面的所有东西; - )

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你正在寻找原型:

======

function exampleModule(id)
{
    this.id = id;
}


exampleModule.prototype.create = function()
{

}

======

var module1 = new exampleModule(123);
module1.create();

var module2 = new exampleModule(456);
module2.create();