正常代码:
<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'
没搞明白这是什么意思= =
这里的this是window对象,所以提示找不到haha方法
回复 @霸王CSS:如果不用setInterval,就不会报错了回复 @霸王CSS:this.hehe在被传入setInterval函数时,执行的context被改变了,所以this不再是ShaBi.prototype了,而是指向默认的window对象回复 @霸王CSS:我也没搞明白噢,为什么这里的this成了window对象了,但是上面startSb哪个方法里的this.hehe就没出错呢?新手表示不太懂。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。