在javascript中使用setInterval函数在控制台中定义原型打印

时间:2016-11-08 10:06:01

标签: javascript

我正在尝试使用setInterval在原型函数中打印一些东西,它在控制台中显示未定义。



function newFunc(){           
           this.name = "this is person name";
           this.Age = "16 Years";           
       }

       newFunc.prototype.init = function(){           
           setInterval(function(){newFunc.prototype.xyz()}, 1000);           
       }
       
       
       newFunc.prototype.xyz = function(){           
           console.log(this.Age);           
       }


       var abc = new newFunc();
        
        abc.init();




2 个答案:

答案 0 :(得分:1)

newFunc.prototype.init = function(){           
     this.xyz();           
}

更改为this.xyz(),因为您位于同一instance。它不会在setInterval中有效,因为this在这里丢失了。您需要引用this

newFunc.prototype.init = function(){           
  var that = this;
  setInterval(function(){that.xyz()}, 1000);           
}

工作fiddle

https://jsfiddle.net/ptvckunk/

答案 1 :(得分:0)

它也在函数内部。所以应用this.xyz()this声明一些变量并应用于setInterval(copy.xyz())

为何使用this

this.xyz()仅适用于newFunc.prototype.init。不是啊setInteval(function (){})。这两项功能是分开的。所以用setInterval函数传递。我们需要一个变量。所以我只用var copy声明了



function newFunc(){           
           this.name = "this is person name";
           this.Age = "16 Years";           
       }

       newFunc.prototype.init = function(){  
       var copy = this;//in `this` applicable only  newFunc.prototype.init.it copy from another variable
           setInterval(function(){//in this function are different.
             copy.xyz()//passing variable and excute the function
           
           }, 1000);           
       }
       
       
       newFunc.prototype.xyz = function(){           
           console.log(this.Age);           
       }


       var abc = new newFunc();
        
        abc.init();