js的工厂模式怎么设置

pikay 发布于 2013/08/22 15:35
阅读 474
收藏 0

本人编程小白一枚,最近刚学js,请问下js的工厂模式怎么使用setTimeout方法?原代码如下

<script type="text/javascript">
function donghua(){
	this.i = 2;
}
donghua.prototype.dh = function () {
	document.getElementsByTagName("div").item(0).style.height=this.i+"px";
	if(this.i<=40){
		this.i+=2;
		this.t=setTimeout(this.dh(),50);
	}
}
function action()
{
	var a = new donghua();
	a.dh();
}
</script>
<body>
<div style="width:100%;margin:auto; height:0; line-height:40px; background:#eee;border-bottom:#a0a0a0 solid 1px;font-size:12px; text-align:center; overflow:hidden;">你好,我是测试文字
</div>
 <body>
然后用一个button触发action(),将div[0]制造一种下拉展开动画的效果;代码问题出在setTimeout那里,没办法使用,触发action()之后就直接弹出没有动画效果了,看网上说那里要用function(){}封起来,试过了没用,貌似没有传递a这个对象;

个人表示不明为什么要function(){}封起来?

我只想用这个工厂模式去实现,不用其他方式去做,还有这样使用工厂模式哪里错了? 

加载中
0
Arrowing
Arrowing
setTimeout(this.dh(),50);
这里第一个参数是函数的引用,不是函数执行

var _this = this;
setTimeout((function(){
    return function(){
        _this.dh.call(_this);
    }
})(),50);
0
pikay
pikay

引用来自“arrowing”的答案

setTimeout(this.dh(),50);
这里第一个参数是函数的引用,不是函数执行

var _this = this;
setTimeout((function(){
    return function(){
        _this.dh.call(_this);
    }
})(),50);
成功了,灰常感谢,里面有些看不懂要慢慢理解
返回顶部
顶部