Javascript超时抓不到class中的值
Javascript timeout can't catch the value in class
function MyClass(){
this.field1 = "Field in MyClass";
}
MyClass.prototype.print = function() {
console.log("print in MyClass:" + this.field1);
}
function useMyClassPrint() {
var mc = new MyClass();
mc.print();
setTimeout(mc.print, 10);
setTimeout("mc.print()", 10);
}
我得到这些结果:
mc.print(); // this one is easy, it returns "print in MyClass:Field in MyClass"
// but ...
setTimeout(mc.print, 10); // "print in MyClass:undefined" why?!
setTimeout("mc.print()", 10); // runtime error?!@@
function MyClass(){
this.field1 = "Field in MyClass";
}
MyClass.prototype.print = function() {
console.log("print in MyClass:" + this.field1);
}
var mc = new MyClass();
mc.print(); /*ok*/
setTimeout(mc.print, 10); /*it's just a reference to function*/
setTimeout(mc.print.bind(mc),10);/*binded*/
当你定义
function MyClass(){
this.field1 = "Field in MyClass";
}
在实例化 class 时设置 field1。字段 1 不是常量。
在控制台中尝试:
MyClass.field1 -> /*undefined*/
new MyClass().field1 -> /*Field in MyClass*/
setInterval()函数接收一个函数:
setTimeout(mc.print, 10);
mc.print 只是对函数的引用,没有引用您的 "mc" 实例。
function MyClass(){
this.field1 = "Field in MyClass";
}
MyClass.prototype.print = function() {
console.log("print in MyClass:" + this.field1);
}
function useMyClassPrint() {
var mc = new MyClass();
mc.print();
setTimeout(mc.print, 10);
setTimeout("mc.print()", 10);
}
我得到这些结果:
mc.print(); // this one is easy, it returns "print in MyClass:Field in MyClass"
// but ...
setTimeout(mc.print, 10); // "print in MyClass:undefined" why?!
setTimeout("mc.print()", 10); // runtime error?!@@
function MyClass(){
this.field1 = "Field in MyClass";
}
MyClass.prototype.print = function() {
console.log("print in MyClass:" + this.field1);
}
var mc = new MyClass();
mc.print(); /*ok*/
setTimeout(mc.print, 10); /*it's just a reference to function*/
setTimeout(mc.print.bind(mc),10);/*binded*/
当你定义
function MyClass(){
this.field1 = "Field in MyClass";
}
在实例化 class 时设置 field1。字段 1 不是常量。
在控制台中尝试:
MyClass.field1 -> /*undefined*/
new MyClass().field1 -> /*Field in MyClass*/
setInterval()函数接收一个函数:
setTimeout(mc.print, 10);
mc.print 只是对函数的引用,没有引用您的 "mc" 实例。