需要建议。。。Javascript面向对象/名称空间

需要建议。。。Javascript面向对象/名称空间,javascript,namespaces,object,Javascript,Namespaces,Object,现在我觉得我需要提高我的javascript技能,因为我已经看到我想要实现的东西会变得相当复杂。我已经对同一段代码进行了4次整理,我仍然不确定这是否是最好的方法 任务: 网页的用户可以向网页添加不同的表单,我称之为模块。每个表单提供不同的用户输入,需要以不同的方式处理。可以根据用户的喜好将相同类型的表单/模块添加到表单列表中 我当前的解决方案: 为了使代码更具可读性和更独立的函数,我使用了命名空间对象。第一个对象包含一般任务,并通过一个映射引用各个表单,该映射包含多个数组,其中每个数组都包含表单

现在我觉得我需要提高我的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模块\u处理程序={
_map:[],/*map{reference_to_obj,id}*/
init:function(){
var module=example_module;/*为本例预定义*/
创建(模块);
},
创建:函数(模块){
//在地图中存储对obj id的引用
this._map.push([module,id=this.createID()]);
模块创建(id);
},
createID:函数(id){
//用于查找可用id的递归函数
},
删除:函数(id){
//从地图中删除
var idx=此._map.indexOf(id);
如果(idx!=-1)这个映射拼接(idx,1);
//从DOM中删除
$('#'+id+'').remove();
}
}
变量示例_模块={
创建:函数(id){
//插入html
$(“#”+id+”>.module_edit_inner')。替换为(“”);
}
}

现在是我的问题;-)
需要有地图的想法吗

我的意思是:难道没有比这更优雅的东西吗

var moduleXYZ=新的示例_模块(id)

它复制对象并仅引用该形式。。。。更符合逻辑并提高速度的东西主要问题是,现在,如果我在任何其他函数上调用例如“example\u module.create()或更高版本,我每次都需要遍历DOM。使用这种结构,我不能引用类似“this”


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


谢谢!

我想您正在寻找原型:

=========

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


exampleModule.prototype.create = function()
{

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

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

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


exampleModule.prototype.create = function()
{

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

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

我认为您正在寻找原型:

=========

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


exampleModule.prototype.create = function()
{

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

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

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


exampleModule.prototype.create = function()
{

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

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

嗯,谢谢…我认为这是正确的方法。现在我必须弄清楚如何将其应用到我已经拥有的结构中;-)我建议将每个类分离成一个单独的JS文件。将其命名为类的名称。此时,您已经非常接近Java/OOP。您只需小心保存“这个”“。Prototype JS库对于这种类型的OOP JS编程非常有用。嗯,谢谢。。。我认为这是正确的方法。现在我必须弄清楚如何将它应用到我已经拥有的结构中;-)我建议将每个类分离成一个单独的JS文件。将其命名为类的名称。现在,您已经非常接近Java/OOP了。你只需要小心保存“这个”。Prototype JS库对于这种类型的OOP JS编程非常有用。