开发者社区> 问答> 正文

JS报错:Uncaught TypeError: Object [object ?报错

正常代码:

<script type="text/javascript"> function ShaBi(name) { this.name = name; }

ShaBi.prototype.startSb = function() { var $timer = setInterval(this.hehe,50); }

ShaBi.prototype.hehe = function() { alert("!"); }

var sb = new ShaBi("sb"); sb.startSb(); </script>

错误代码:

<script type="text/javascript">
function ShaBi(name)
{
    this.name = name;
}

ShaBi.prototype.startSb = function()
{
    var $timer = setInterval(this.hehe,50);
}

ShaBi.prototype.hehe = function()
{
    this.haha();
}

ShaBi.prototype.haha = function()
{
    alert("!");
}

var sb = new ShaBi("sb");
sb.startSb();
</script>

错误:

Uncaught TypeError: Object [object global] has no method 'haha'

没搞明白这是什么意思= =

展开
收起
爱吃鱼的程序员 2020-06-14 22:41:25 622 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
    ShaBi.prototype.hehe=function(){this.haha();}

    这里的this是window对象,所以提示找不到haha方法

    回复 @霸王CSS:如果不用setInterval,就不会报错了回复 @霸王CSS:this.hehe在被传入setInterval函数时,执行的context被改变了,所以this不再是ShaBi.prototype了,而是指向默认的window对象回复 @霸王CSS:我也没搞明白噢,为什么这里的this成了window对象了,但是上面startSb哪个方法里的this.hehe就没出错呢?新手表示不太懂。
    2020-06-14 22:41:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载