调用setInterval();函数



我正在尝试调用setInterval((;在类内的函数上,但当它在类内时,我在实例化它时遇到问题。我是在构造函数中实例化它,还是在类本身的某个地方实例化它?我在changePrice((上调用setInterval;函数,但如果控制台的更新似乎不起作用,则检查控制台是否进行测试。

class Stocks {

availableStocks = [{name: 'GOOG', price: 10, qty:3},

availableFunds = 1000;
cashflow = 1000;
constructor (name, price, qty) { 

this.name = name;
this.price = price;
this.qty = qty;
this.changePrice();
}
changePrice (this.price) {
//generate random number -1 or 1
let chance = Math.round(Math.random()) * 2 - 1;

//adds chance/10 to price
price += chance/10; 
console.log(price);
return price;
}
setInterval(this.changePrice(), 1000);
}

两个原因。

首先,this.changePrice()立即调用函数,并将返回值传递给setInterval。您需要省略括号,因为您希望传递函数本身,而不是立即调用它:this.changePrice

其次,您会发现这仍然不太正确,因为this是一个棘手的问题。您传递的是函数,而不是this参数,因此在回调中,this将引用全局window对象。要解决这个问题,您需要以某种方式this绑定到函数。这有几种技巧。

经典:

var self = this;
setInterval(function() { self.changePrice() }, 1000);

稍显晦涩:

setInterval(this.changePrice.bind(this), 1000);

现代:

setInterval(() => this.changePrice(), 1000);
  1. 实例化您的类(您定义了它,但实际上并没有创建实例

  2. 在构造函数中启动间隔。不能在类的中间、构造函数或方法之外有像setInterval这样的浮动指令。

  3. 任务完成

class Stocks {

availableStocks = [{ name: 'GOOG', price: 10, qty: 3 }],

availableFunds = 1000;
cashflow = 1000;

constructor(name, price, qty) {

this.name = name;
this.price = price;
this.qty = qty;

this.changePrice();
setInterval(this.changePrice, 1000);
}

changePrice(this.price) {

//generate random number -1 or 1
let chance = Math.round(Math.random()) * 2 - 1;

//adds chance/10 to price
price += chance / 10;
console.log(price);
return price;
}

}

new Stocks(); // Instanciate your class

最新更新