function Fun(){
  this.x = 1;
  this.y = 2
}
Fun.prototype.fun1 = funtion(){
    window.setTimeout(this.fun2,1000)}Fun.prototype.fun2=function(){
  alert(this.x);
}为什么我在 fun1 里面 用延时调用函数 而那个被调用的函数  不能访问 这个类中的属性   有什么办法让他可以访问

解决方案 »

  1.   

    Fun.prototype.fun1 = funtion(){
    var obj = this;
      window.setTimeout(obj.fun2,1000)}说明: this 表示当前对象,即Fun!它的作用域在当前函数中fun1
    而window.setTimeout 的作用域在函数fun1 外面!!声明变量引用一下this 就可以了
    楼主看看 js 闭包 就明白了!
      

  2.   

    function Fun(){
      this.x = 1;
      this.y = 2
    }
    Fun.prototype.fun1 = funtion(){
      var _self = this;
      window.setTimeout(_self.fun2,1000)}Fun.prototype.fun2=function(){
      alert(this.x);
    }
      

  3.   

    function Fun(){
      this.x = 1;
      this.y = 2
    }Fun.prototype.fun1 = function(){
        this.fun2(this.ff)
    }Fun.prototype.fun2=function(fun){
      fun("1");
    }Fun.prototype.ff=function(x){
       alert(this.x)
    }var f = new Fun();
    f.fun1()
    那这个呢?
    ff里面alert(this.x)
    也取不到当前对象的属性
      

  4.   

    <script type="text/javascript">
    function Fun(){
      this.x = 1;
      this.y = 2
    }Fun.prototype.fun1 = function(){
        this.fun2(this.ff,this)
    }Fun.prototype.fun2=function(fun,obj){
      fun("1",obj);
    }Fun.prototype.ff=function(x,obj){
       alert(obj.x)
    }var f = new Fun();
    f.fun1()
    </script>
      

  5.   


    在我的浏览器中没有通过呀,
    var _self = this;
    window.setTimeout(_self.fun2,1000)是不是应该这样
    var _self = this;
    window.setTimeout(function(){
        _self.fun2();
    }, 1000);  
      

  6.   

    function Fun(){
      this.x = 1;
      this.y = 2
    }Fun.prototype.fun1 = function(){
        this.fun2(this.ff) //这里是将this.ff指向的函数体作为参数传给this.fun2方法.
    }Fun.prototype.fun2=function(fun){ //所以这里的fun和Fnu己经没有关系了,当运行fun()的时候,调用它的是window.
        //fun("1");
        fun.call(this, "1");  //用call更改调用fun的对象(也就是fun内部this的指向)
    }Fun.prototype.ff=function(x){
       alert(this.x)
    }var f = new Fun();
    f.fun1()