注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

前端开发那点事儿

冒犯之处,敬请谅解。

 
 
 

日志

 
 
 
 

settimeout陷阱  

2013-04-20 20:20:22|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
function popTip(text){
    this.tipDiv = false;
    this.intervalCharnge = false;
    this.showEndFlag = false;

    this.init = function(){
        var tipDiv = document.createElement("div");
        tipDiv.style.position = 'absolute';
        tipDiv.style.fontSize = '20px';
        tipDiv.style.fontWeight = 'bold';
        tipDiv.style.top = '-50px';
        tipDiv.style.left = '0px';
        tipDiv.style.right = '0px';
        tipDiv.style.padding = '10px';
        tipDiv.style.background = 'gold';
        tipDiv.style.textAlign = 'center';
        tipDiv.innerHTML = text || '从一侧向另一侧滑动可在普通模式/同环比模式间切换';
        this.tipDiv = tipDiv;
    };
    
    this.show = function(){
        document.body.appendChild(this.tipDiv);
        var _ = this;
        var T = this.tipDiv;
        _.intervalCharnge = setInterval(function(){
            var t = Number(T.style.top.replace('px',''));
            if(!_.showEndFlag){
                if(t < 0){
                    T.style.top = (++t) + 'px';
                }else{
                    T.showEndFlag = true;
                    clearInterval(_.intervalCharnge);
                    setTimeout(function(){
                        _.hide();
                    },5000);

                }
            }
        },50);
    };
    
    this.hide = function(){
        var T = this.tipDiv;
        window.intervalCharnge = setInterval(function(){
            var t = Number(T.style.top.replace('px',''));
            if(t > -50){
                T.style.top = (--t) + 'px';
            }else{
                clearInterval(window.intervalCharnge);
                document.body.removeChild(T);
            }
        },50);
    };
    
    this.start = function(){
        this.init();
        this.show();
    };
}




+++++++++++++++


JS中setTimeout无法调用类成员是怎么回事?

2013-03-07 11:28 anhuiheliang | 分类:JavaScript | 浏览56次
function ok()
{
this.a=10;
this.b=function()
{
alert(this.a)
}
this.c=function()
{
setTimeout(this.b,1000);
}
}
o=new ok();
o.c();
提问者采纳
2013-03-07 13:19
当是使用window.setTimeout,或者是使用window.setInterval 时,函数中的this已经不是当前的ok这个了,而是window对象。

你的ok对象里的c函数应该改成如下:

this.c = function(){
var obj = this;
setTimeout(function(){
obj.b();
},1000);
}
提问者评价
谢谢你帮我大忙了
评论|0
按默认排序|按时间排序

其他3条回答

2013-03-07 14:06邢富鹏|五级
<script>
function ok()
{
this.a=10;
this.b=function()
{
alert(o.a);
alert(this.a)
}
this.c=function()
{
setTimeout(this.b,1000);
}
}
o=new ok();
o.c();
</script>
调用了 应该这样写 变量的作用域不应该用this.a 用o.a就正确了
  评论这张
 
阅读(400)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017