日期:2014-05-16  浏览次数:20422 次

关于ext4这种情况,怎么设计比较靠谱点呢?
现在比较纠结,如果不考虑函数通用性,我直接命名不同名字的函数就好了,就不会不知道调用到那个函数去。
比如,现在两个差不多功能的js,grid1.js和grid2.js,(实际上永远不止两个,不然我命名不同就发了),
这两个js,除了展示的数据不一样,其它的几乎一样,增删改查什么的,连新建的grid对象的窗口也是一样的。

具体点,我在grid1.js中,有个function open()的函数,在grid2.jsp中,也有个function open()的函数,
这个时候,在整个js中,就会有两个相同名字的函数了,我就预感到,肯定会出问题,果然,当我在grid2.js中,操作open后,再在grid1.jsp中,操作open,此时,我发现,调用的不是grid1.js中的,调用到了grid2.js中去了。
这显示是不允许的。当然,最简单的解决方法是:open函数分别改为:open1,open2,但是,以后,可能还会出现open10的情况,似乎有点土啊,所以,先不想这样做。
这个时候,估计有人说,为何不单独做成一个公用的函数呢,就一个open好了,然后传参数,就可以区别不同的grid列表了。
是的,但我发现,这样做有另一个问题,首先,我把open这个函数放在了common.js中,但我在执行open1.js的时候,我还要改变grid1.js中的全属变量,比如,我要记录所点击的grid1.js中的列表的索引,(有用,当打开窗体后,里边会有上一条记录,下一条记录之类的),grid2.js中也一样。
这样的话,我在commnon.js中使用open函数时,就没法区分和改变grid1.js和grid2.js中的索引了。
当然使用公用函数时,怎么解决这样问题呢?

说了不少,似乎有点乱,不知道说清楚了没,先说这些吧,后面大家不大明白的,我再补充说明。

------解决方案--------------------
grid1.js有全局变量:var index;
grid2.js也有全局变量:var index;

全局变量就覆盖了,哪还来的2个index。

你都怎么申明的index。

方案你自己已经想到了,就是打开的时候传递参数以区分更新哪个控件或者变量
------解决方案--------------------
使用面向对象方法去实现吧,类似如下代码:
JScript code

grid=function(){
   var index=0;
   return{
      open:function(){
          index++;
      }
   }
};

var grid1=new grid();
var grid2=new grid();

------解决方案--------------------
3L的方案不错啊
------解决方案--------------------
面向对象
grid1.open
grid2.open
如果grid2和grid1大部分都相同,只是数据不同,可以只定义一个类,然后实例不同的对象.
------解决方案--------------------
采用面向对象的JS设计方法。
例子:
var Grid1={
newinstance:function(){
var grid={};
//对象属性
grid. moduleName=”Grid1”;
//public方法
grid.open=function(){
};
return grid;
}
}
var Grid2={
newinstance:function(){
var grid={};
//对象属性
grid. moduleName=”Grid1”;
//public方法
grid.open=function(){
};
return grid;
}
}

var grid1=Grid1.newinstance();
grid1.open();
var grid2=Grid2.newinstance();
grid2.open();