需要建议。。。Javascript面向对象/名称空间
现在我觉得我需要提高我的javascript技能,因为我已经看到我想要实现的东西会变得相当复杂。我已经对同一段代码进行了4次整理,我仍然不确定这是否是最好的方法 任务:需要建议。。。Javascript面向对象/名称空间,javascript,namespaces,object,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模块\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编程非常有用。