我试图在构造器中每秒调用一个方法,持续15秒,但setInterval似乎不起作用
I'm trying to call a method in a constructer every second for 15 seconds but setInterval doesn't seem to work
代码-也可在这里获得:
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.fillStyle = "#000000" ;
ctx.fillRect(0,0,600,600);
ctx.fillStyle ="#ffffff";
var entities = [];
var x;
var y;
function ship(x, y) {
entities.push(entities.length-1);
this.name = entities.length-1;
this.draw = function(){
ctx.fillRect(x,y,30,30);
};
this.update = function(){
x+=10;
this.draw();
};
}
var bob = new ship(0,0);
bob.draw();
var intervalID = setInterval(bob.update(), 1000);
setTimeout(function() {
clearInterval(intervalID);
}, 18000);
基本上,我在左上角画了一个正方形。然后我尝试使用一种方法来实时移动它。当我使用for循环时,我可以看到正方形移动了,但显然它移动得太快了,甚至没有注意到。
你需要传递一个绑定引用给bob.update
var intervalID = setInterval(bob.update.bind(bob), 1000);
将index.html第48行改为
var intervalID = setInterval(function(){bob.update()}, 1000);
你应该很好
我没有运行代码,但这看起来是你的问题
setInterval(bob.update(), 1000)
setInterval
的第一个参数需要是一个函数对象——在本例中是船舶对象的update
函数。
在上面的声明中,你实际上是调用 update
函数,所以传递给setInterval
的不是update
函数本身,而是调用它的返回值-这是未定义 -所以你的setInterval
做…没有,每一秒。
你需要将更新函数"绑定"到bob对象,这样this
的值在每次实际调用时都是bob对象的this
。
将其更改为这样,即传递绑定到bob对象的update
函数,并尝试再次运行
setInterval(bob.update.bind(bob), 1000)
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- toBoolean方法类似于toString
- 如何在单击复选框后调用控制器方法
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- jQuery持续时间方法
- 在持续集成后,在生产服务器中使用Webpack处理环境变量的两种方法
- 最简单的方法找到一个日期,X持续时间从另一个日期,在moment.js
- 通过ajax向数据库发出持续请求的有效方法是什么?
- CPU使用量持续增长;有没有一种方法可以在JavaScript中删除我未使用的对象
- 我试图在构造器中每秒调用一个方法,持续15秒,但setInterval似乎不起作用