求助啊。。。js面向对象问题。。T。T

helloChase 2012-04-15 12:13:10
LittleMan.prototype.start = function()
{
setInterval(function(){
this.update();
},50);
}

这是我的一段js代码,上面的start方法和update方法都是LittleMan类中使用prototype定义的方法,现在我想在start方法中每50毫秒调用一次update方法(如上),但是每次都显示this.update is not a function
大神们。。帮帮我啊。。。。
...全文
152 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
未知数 2012-04-18
  • 打赏
  • 举报
回复
this的指向不对
LittleMan.prototype.start = function()
{
setInterval(function(){//该匿名函数不是对像的方法,故函数内this不指向对象,指向window
alert(this);//自己alert测试下就知道了
//this.update();
},50);
}
修改如下:
LittleMan.prototype.start = function()
{
setInterval(this.update,50);//此方法不完美,虽然会调用该函数,但不是作为对象的方法调用,update方法里面如果有this的话指向会是window而不是对象
}
LittleMan.prototype.start = function()
{
var update=this.update;
setInterval(function(){update();},50);//这种方式也可以,避开了this指向问题
}


aihua17 2012-04-17
  • 打赏
  • 举报
回复
this === window
-AJ- 2012-04-17
  • 打赏
  • 举报
回复
作用域不对
firebug 一目了然
helloChase 2012-04-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

LittleMan.prototype.start = function()
{
var self = this;
setInterval(function(){
self.update();
},50);
}
[/Quote]
但是不使用setInterval函数,只使用this.update();是可以进入函数的。。好诡异啊。。。
helloChase 2012-04-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

LittleMan.prototype.start = function()
{
var self = this;
setInterval(function(){
self.update();
},50);
}
[/Quote]
我试过了,但是调试的时候self确实有update函数,但是没有进入update函数,更没有没50ms调用一次。。。我无语了。。
prototyper 2012-04-15
  • 打赏
  • 举报
回复
LittleMan.prototype.start = function()
{
var self = this;
setInterval(function(){
self.update();
},50);
}
我爱小土豆 2012-04-15
  • 打赏
  • 举报
回复
要不就用settimeout试试调用自身
prototyper 2012-04-15
  • 打赏
  • 举报
回复
这样没错,属其它错误了。
TEST:
<div id="test">0</div>
<script>
function LittleMan(){}
LittleMan.prototype.update = function(n){document.getElementById("test").innerHTML = n}
LittleMan.prototype.start = function(){
var i = 0, self = this;
setInterval(function(){self.update(i++)},1000);
}
new LittleMan().start();
</script>

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧