讲怎么写倒计时器的。现在有点浮躁,有点困,所以后面写成组件的计时器没有看进去QUQ,回去再约。但是看到了文中提到的setTimeout和setInterval的区别,还有关于leftpad的标准构造,还有设计构造模式的过程。这么一说发现这篇文章真的是干货满满!大赞。
1.setTimeout和setInterval的区别
setTimeout是过了多久之后调用这个函数,setInterval是每过多久调用这个函数。由于js是单线程的,所以这两者都有可能被阻塞。这就导致了他们两个不一定会准时执行。
setTimeout的延时关系还不会太大,但是setInterval如果有一个地方阻塞了,那么到了时间,还是会调用函数,但是这些调用(回调)会被堆积,但是如果不阻塞了,也只执行其中的一个,所以这样对性能和内存影响比较大。所以一般都是建议使用setTimeout而不是setInterval。并且由于各种原因都有可能出现线程的阻塞,所以倒计时算得越久误差越大。
2.leftpad(左补零)
之前对于补零这件事真的没有想太多,甚至代码就是作者列的第一个QUQ。
这个函数需要考虑:1.负数 2.参数类型不确定,不一定是字符 3.想要左补的不一定是0可能是其他的字符
看看node中leftpad的实现:
function leftpad (str, len, ch) {
str = String(str); //解决类型问题
var i = -1;
if (!ch && ch !== 0) ch = ' '; //解决向左补齐指定字符问题
len = len - str.length;
while (++i < len) {
str = ch + str;
}
return str;
}
不过这个没有考虑负数的情况
3.关于设计模式
设计模式有好多……刚刚翻了一遍,挺多的……有点凌乱。感觉不用特意去记,但是涉猎应该是要广的。
所以这里复习一下对象的创建方法。
1.工厂模式。把函数当做一个工厂,内部创建一个对象,然后返回出来。每次调用就返回一个对象。
2.构造函数。把函数当做构造函数,所以很显而易见的方式。this.xxx统治一切=。=。使用的时候用new方法创建对象
3.原型模式。把属性和方法都挂载到prototype上,这样对函数使用new构造一个新对象,这个对象就可以直接访问到函数的prototype原型对象。
元方法大概是这三种。