为什么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',没搞明白这是什么意思= = 展开
<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',没搞明白这是什么意思= = 展开
3个回答
展开全部
因为这个是由于 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(); // 调用就可以了
如果第一个参数传递的是个字符串,那么它将会这么做
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(); // 调用就可以了
展开全部
这个是由于 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(); // 调用就可以了
如果你的第一个参数传递的是个字符串,那么它将会这么做
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(); // 调用就可以了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
它说没有'haha'这个方法,你的haha是从哪里来的。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询