http://www.cnblogs.com/blueSkys/archive/2011/09/28/2194420.html
上面都说清楚 。感谢大家帮忙看看啊。。谢谢了

解决方案 »

  1.   

    slide.start() 改为 slide.start.call(this.obj);
      

  2.   

    你使用this的时机错了不过可以用 apply 或者 call 来改变 函数执行时的this指向 this.start.apply(this.obj);简单点 一般应该这样写(在s内部 不要出现s这个变量名)
    var s={
        obj:'obj1'
        ,init:function(){
            this.start();
        }
        ,start:function(){
           alert(this.obj); //对this下面obj的使用
        }
    }
    s.init()
      

  3.   

    用call或apply改变this作用域this.start.apply(this.obj);还有一点
    start:function(){
        //o是什么 哪来的
        setInterval(slide.top_do,o.speed);
        o.onmouseout = slide.start;
        o.onmouseover = slide.stop;
    },
      

  4.   


    哦 var o = this;
      

  5.   

    还有 我发现一个问题:
    我在start方法中增加了
    if(this.obj){
       this.start.apply(this.obj);
    }
    以后 这个start在执行一次后又执行了一次 ??
    为啥呢?
      

  6.   

    因为你apply了一下啊 会调当前this对象的start方法 这个逻辑要在你的呃start中做一下控制
      

  7.   

    因为你apply了啊  相当于你又调用了未改变this作用域之前的this对象的start方法  所以你要在你的start方法的逻辑中做一下控制