现在比较纠结,如果不考虑函数通用性,我直接命名不同名字的函数就好了,就不会不知道调用到那个函数去。
比如,现在两个差不多功能的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中的索引了。
当然使用公用函数时,怎么解决这样问题呢?说了不少,似乎有点乱,不知道说清楚了没,先说这些吧,后面大家不大明白的,我再补充说明。

解决方案 »

  1.   

    简单再总结一句吧:
    我想在不同的js文件中,调用同一个函数,同时,我要改变不同js文件中的全局变量,
    grid1.js有全局变量:var index;
    grid2.js也有全局变量:var index;
    我在grid1.js中,调用公用函数时,grid1.js中的index要+1,grid2.js中index不变,
    反之同理。
    (注:如果是java什么的语言,可以定义为静态变量这个就好处理了,js貌似没这个东东,本人js水平有限,各位大虾指点下吧)
      

  2.   

    grid1.js有全局变量:var index;
    grid2.js也有全局变量:var index;全局变量就覆盖了,哪还来的2个index。你都怎么申明的index。方案你自己已经想到了,就是打开的时候传递参数以区分更新哪个控件或者变量
      

  3.   

    使用面向对象方法去实现吧,类似如下代码:grid=function(){
       var index=0;
       return{
          open:function(){
              index++;
          }
       }
    };var grid1=new grid();
    var grid2=new grid();
      

  4.   

    var index只是在grid1.js中的全局变量,都加了var了,
    grid2.js中的全局变var index, 这两个变量不一样啊,只是名字取一样罢了。
    这里的全局是相对的,如果相对整个工程,那么,这两个index都是局部变量啊
      

  5.   

    似乎也没效果
    认真想了下,看来,只能取不同的名称的了,
    如:
    grid1.js中,var index1;
    grid2.js中,var index2;
    然后,函数是可以共用的,传参数进去就好了。
    通过参数,来判断,是grid1.js中操作还是grid2.js中操作,是grid1.js的话,就执行,index1++,是grid2.js的话,就执行,index2++
    不知道有没更好的办法
    三楼说的用类,不大好理解
      

  6.   

    面向对象
    grid1.open
    grid2.open
    如果grid2和grid1大部分都相同,只是数据不同,可以只定义一个类,然后实例不同的对象.
      

  7.   

    采用面向对象的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();