为什么JS里,setInterval("this.hehe()",50);不行?

代码:<scripttype="text/javascript">functionShaBi(name){this.name=name;}ShaBi.prototype.... 代码:
<script type="text/javascript">
function ShaBi(name)
{
this.name = name;
}

ShaBi.prototype.startSb = function()
{
var $timer = setInterval("this.hehe()",50);
//改成下面就对了,为什么上面的不行?
var $timer = setInterval(this.hehe(),50);
}

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

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

错误:
Uncaught TypeError: Object [object global] has no method 'haha',没搞明白这是什么意思= =
展开
 我来答
她是我的小太阳
高粉答主

推荐于2016-03-17 · 醉心答题,欢迎关注
知道顶级答主
回答量:5.1万
采纳率:83%
帮助的人:8986万
展开全部
因为这个是由于 setInterval 这个方法的参数不同引起的this指针变化
如果第一个参数传递的是个字符串,那么它将会这么做
var fn = new Function('this.hehe()'); // 首先将这个字符串编译成一个函数
fn.call(window); // 然后把它的this指针指向window然后执行

这样相当于是 window.hehe() 当然没有hehe的方法了,这样来使用可以避免这种问题
function A(){
}

A.prototype.fn1 = function(){
var self = this; // 把自己的thi指针保存起来

setInterval(function(){
self.hehe();

} , 50);
// 这里参数第一个传方法,而不是字符串

}

A.prototype.hehe = function(){
alert('hehe')

}

var a = new A;
a.fn1(); // 调用就可以了
huibo865686
推荐于2016-04-09 · TA获得超过916个赞
知道小有建树答主
回答量:325
采纳率:80%
帮助的人:264万
展开全部
这个是由于 setInterval 这个方法的参数不同引起的this指针变化
如果你的第一个参数传递的是个字符串,那么它将会这么做
var fn = new Function('this.hehe()'); // 首先将这个字符串编译成一个函数
fn.call(window); // 然后把它的this指针指向window然后执行

这样相当于是 window.hehe() 当然没有hehe的方法了,你这样来使用可以避免这种问题
function A(){
}

A.prototype.fn1 = function(){
var self = this; // 把自己的thi指针保存起来

setInterval(function(){
self.hehe();

} , 50);
// 这里参数第一个传方法,而不是字符串

}

A.prototype.hehe = function(){
alert('hehe')

}

var a = new A;
a.fn1(); // 调用就可以了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
120953720
2014-08-18 · TA获得超过572个赞
知道小有建树答主
回答量:310
采纳率:0%
帮助的人:210万
展开全部
它说没有'haha'这个方法,你的haha是从哪里来的。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式