本帖最后由 lw5853103 于 2012-09-01 18:50:04 编辑

解决方案 »

  1.   

    代码都不全    有部分变量都不知道是什么...   
    看样是还是闭包的原因   有两种方案 貌似下面的那种 立即执行一函数 改变this的作用域的方式 是一种还有一种就是 通过给对象添加需要的参数 然后再 函数里面使用这个参数  相当于是给 当前对象绑定 你所需要的参数 之类    
      

  2.   

    看不明白。顺便菜鸟的问一下oLables[i].onmouseover = function(self){
        //因为我想调用外部定义的startAction函数,所以不得不使用闭包
         self.startAction(oLis[this.index] , {"opacity":100}); 
    // 这里出现了问题!这里的this指向的不是 oLables[i],所以this.index实际上undefined,我打印了this输出结果是:window...
        }(this);
    最后面的(this)有啥作用?
      

  3.   


    NavBar.prototype.init = function(){
    var _startAction ==this.startAction;  
    for(var i = 0 ; i < this.showLength; i++)
      {
        oLi[i].index = i;
       oLables[i].onmouseover = function(self){
         _startAction(oLis[this.index] , {"opacity":100});    
     };
      }
    }
      

  4.   

    似乎用了插入代码就不能改变色彩了啊...
    用一个局部变量保存外层函数的this指向就可以了
    NavBar.prototype.init = function(){
    var _this=this;
      for(var i = 0 ; i < this.showLength; i++)
      {
        oLi[i].index = i;
       oLables[i].onmouseover = function(){
         _this.startAction(oLis[this.index] , {"opacity":100}); 
        }
      }
    }
      

  5.   

    function xxx(self){...}(this)
    这种写法表示定义函数后立即执行,后面的括号里面自然是参数,this对应self参数
      

  6.   

    也就是说,参数self=后面的this??
    这个东东写和不写,区别在哪里?
    我做了个小例子去帮助自己理解,i=0时无错,但后面就报错:尚未实现
      

  7.   

    oLables[i].onmouseover = function(self){
        //因为我想调用外部定义的startAction函数,所以不得不使用闭包
         self.startAction(oLis[this.index] , {"opacity":100}); 
    // 这里出现了问题!这里的this指向的不是 oLables[i],所以this.index实际上undefined,我打印了this输出结果是:window...
        }(this);
    应该是:oLables[i].onmouseover = (function(self){
         self.startAction(oLis[this.index] , {"opacity":100}); 
        })(this);
    //this值传给self供闭包函数内用。不过我建议传i进去更好。oLables[i].onmouseover = (function(n){
         oLables[n].startAction(oLis[n] , {"opacity":100}); 
        })(i);
      

  8.   

    当然有区别,函数内的this总是指向调用函数的对象,也就是说他xxx.onmouseover=function(){}后,该函数成为xxx对象的方法,作为方法被调用时函数内部this指向xxx,而不是外层的this指向了,
    所以他想将外层函数的this作为参数传进函数调用
    但这儿他这么写是错误的,定义函数后立即执行,xxx.onmouseover=function(){}()得到的实际是该函数的返回值才对,函数没有返回值,所以他的oLables[i].onmouseover得到的值应该是undefind
      

  9.   

    呃,明白了。谢谢指教那他这么用貌似也没什么必要,多绕呀,直接外面再定义一个变量,像你说的 var _this=this;就可以使用外部的this了,与oLables[i].onmouseover中的this又不冲突
      

  10.   

    我估计这应该是你马上调用函数的原因,这种匿名函数,在未赋予给特定对象时,应该会被当成是一个全局函数,这时它的this就会指向window这个全局对象了