BOM也叫浏览器对象模型,它提供了很多对象,用于访问浏览器的功能。BOM缺少规范,每个浏览器提供商又按照自己的想法去扩展它,那么浏览器共有对象就成了事实的标准,所以,BOM本身是没有标准的或者还没有哪个组织去标准它。
一.window对象
BOM的核心对象就是window,它表示浏览器的一个实例。window对象处于javascript结构的最顶层,对于每个打开的窗口,系统都会自动为其定义window对象。
1.对象的属性和方法
window对象有一系列的属性,这些属性本身也是对象。
window下的属性和方法,可以使用window属性、window方法或者直接属性、方法的方式调用。例如:
window.alert()和alert()是一个意思。
2、间歇调用和超时调用
javascript是单线程语言,但它允许通过设置超时值和间歇时间值来调度代码在特定的时刻执行。前者在指定的时间过后执行代码,而后者则是每隔指定时限执行一次代码。
超时调用需要使用window对象的setTimeout()方法,它接受两个参数:要执行的代码和毫秒的超时时间。
setTimeout("alert('Lee')",1000); //不建议直接使用字符串
function box(){
alert('Lee');
}
setTimeout(box,1000); //直接传入函数名即可
setTimeout(function (){ //推荐做法
alert('Lee');
},1000)
ps:直接使用函数传入的方法,扩展性好,性能更加。
调用setTimeout()之后,该方法会返回一个数值ID,表示超时调用。这个超时调用的ID是计划执行代码的唯一标示符,可以通过它来取消超时调用。
要取消尚未执行的超时调用计划,可以调用clearTimeout()方法并将相应的超时调用ID作为参数传递给它。
var box = setTimeout(function(){ //把超时调用的ID复制给box
alert('Lee');
},1000);
clearTimeout(box); //把ID传入,取消超时调用
间歇调用与超时调用类似,只不过他会按照指定的时间间隔重复执行代码,直至间歇调用被取消或者页面被取消或者页面被卸载。设置间歇调用的发放是setInterval(),它接受的参数与setTimeout()相同:要执行的代码和每次执行之前需要等待的毫秒数。
setInterval(function(){ //重复不停执行
alert('Lee');
},1000);
取消间歇调用方法和取消超时调用类似,使用clearInterval()方法。但取消间歇调用的重复性要远远高于取消超时调用,因为在不加干涉的情况下,间歇调用将会一直执行到页面关闭。
var box = setInterval(functio(){ //获取间歇调用的ID
alert('Lee');
},1000)
clearInterval(box) //取消间歇调用;
但上面的代码是没有意义的,我们需要一个能设置5秒的定时器,需要如下代码:
var num = 0; //设置起始秒
var max = 5; //设置最终秒
setInterval(function(){ //间歇调用
num++; //递增num
if(num == max){ //如果得到5秒
clearInterval(this); //取消间歇调用,this表示方法本身
alert('5秒后弹出!');
}
},1000); //1秒
一般认为,使用超时调用来模拟间歇调用是一种最佳模式。在开发环境下,很少使用真正的间歇调用,因为需要根据情况来取消ID,并且可能造成一些问题,我们建议不使用间歇调用,而去使用超时调用。
var num = 0;
var max = 5;
function box(){
num++;
if(num == max){
alert('5秒后结束!');
}else{
setTimeout(box,1000);
}
}
setTimeout(box,1000); //执行定时器
ps:在使用超时调用时,没必要跟踪超时调用ID,因为每次执行代码之后,如果不在设置另一次超时调用,调用就会自行停止。