0
点赞
收藏
分享

微信扫一扫

JavaScript进阶(二):BOM对象详解

文章目录

前言

上一篇文章中,我们介绍了 BOM 的来源以及其组成部分,为了加深我们对 BOM 的理解,今天我们就将 BOM 中的对象都分析一遍。

下面,我们就开始吧。

从上一篇文章中,我们已经知道,BOM 主要由以下五大对象组成:

  • Window 对象:浏览器窗口对象
  • Navigator:浏览器对象
  • Screen:浏览器所处客户端的显示器屏幕对象
  • History:浏览器当前窗口的访问历史记录对象
  • Location:浏览器当前窗口的地址栏对象

下面我们就将其中最重要的三大对象 Window、History 和 Location 对象进行分析。

一、Window 对象

1、使用(调用)方式

不同于一般的对象,BOM 中的 Window 对象不需要创建就可以直接使用,使用其中的方法直接调用即可,类似于我们已知的静态方法:

window.方法名();

比如我们最常用的一个方法,弹出一个警告框 alert:

window.alert("window弹出");

但由于在客户端 JavaScript 中,window 对象是全局对象,所有的表达式都在当前的环境中计算。要引用当前窗口根本不需要特殊的语法,可以把那个窗口的属性作为全局变量来使用。

也就是说,使用 window 对象中的方法可以不用带对象名,直接写方法名即可:

alert("no window弹出");

动图事例:


2、Window 对象的方法

2.1 三个带弹出框的方法

window 对象中,大致有三个方法为带弹出框的,其方法名和大致用法为:

方法名用法
alert()显示带有一段消息和一个确认按钮的警告框。
confirm()显示带有一段消息以及确认按钮和取消按钮的对话框。
prompt()显示可提示用户输入的对话框。

其中,alert 我们在上面以及前面多次提到了,就不在赘述了,下面我们主要看后面的这两个方法。

首先是 confirm() 方法,其负责显示一个带确认取消按钮的对话框,基本用法为:

confirm("确定这样做吗");

演示:

可以看到,confirm 的确实现了带确认取消的弹窗。

但是也可以看到,无论我点击 confirm 中的 确认 还是 取消,好像都没有什么不同。事实上, confirm 方法会返回一个布尔值,当用户点击确定时返回 true,点击取消时返回 false。下面我们用一个例子演示:

var flag = confirm("确定这样做吗?");
if(flag){
	alert("是的");
}else{
	alert("不");
}

演示:

然后就是 prompt() 方法了,其负责显示一个具有输入框的弹出框,基本用法如下:

promt("输入点东西吧");

同样的,prompt 也具有返回值,返回的就是用户在输入框输入的信息。

使用示例如下:

var text = prompt("输入点东西吧");
alert(text);

演示效果:

总的来说,这三个带弹出框的方法其实各有异同,他们三个使用的优先级为:

confirm > alert > prompt

更推荐大家使用 confirm,用户体验会更舒服。

2.2 与打开和关闭有关的方法

在 window 对象中,跟打开和关闭有关系,且我们最常用的方法有以下两个:

方法名用法
open()打开一个新的浏览器窗口或查找一个已命名的窗口。
close()关闭浏览器窗口。

对于 open() 方法,其负责打开一个新的浏览器窗口,可以指定一个 URL 字符串在新窗口打开指定的网页地址。

其基本的用法如下:

//在新窗口打开百度
window.open("http://www.baidu.com");

open() 方法返回一个 window 对象,该 window 对象为新打开的浏览器窗口。

其次是 close() 方法,其负责关闭指定浏览器窗口,使用时需要指定要关闭的 window 对象,若不指定,则默认关闭当前页面所处的窗口。

其基本用法如下:

<body>
    <input type="button" id="btn" value="打开新窗口">
    <input type="button" id="btnc" value="关闭打开的窗口">
</body>
<script>
        //open方法演示
        var eleBtn = document.getElementById("btn");
        var newwindow;
        eleBtn.onclick = function(){
            newwindow = window.open("http://www.baidu.com");

        }
        //close用法
        var eleBtnc = document.getElementById("btnc");
        eleBtnc.onclick = function(){
            newwindow.close();
        }
</script>

为了更清楚的显示出 close() 方法的用法,在这结合了 open() 方法的使用,close() 方法负责关闭 open() 方法所打开的窗口。

最终呈现效果:

2.3 与定时器有关的方法

在 window 对象中,与定时器相关的方法共有四个,其方法名和大致描述如下:

方法名用法
setTimeout()在指定的毫秒数后调用函数或计算表达式(一次)。
clearTimeout()取消由 setTimeout() 方法设置的时间。
setInterval()按照指定的周期(以毫秒计)来调用函数或计算表达式(多次)。
clearInterval()取消由 setInterval() 设置的周期。

setTimeout():指定时间后执行1次(只执行一次)

setTimeout() 方法规定在指定的时间(毫秒)后执行指定的 JavaScript 代码,且仅 执行一次

语法:

setTimeout(code,millisec);
//code 为指定要执行的JS代码
//millisec 为在执行代码前需要等待的时间(毫秒)

基本的用法为:

//在 3 秒后弹出一个警告框
setTimeout("alert('lololol');",3000);
//在 3 秒后弹出一个 confirm 对话框

相反地,clearTimeout()则是取消由setTimeout()设定的延迟执行的操作。

在一段 JavaScript 代码中,可能会同时出现多个setTimeout()设定的定时器操作,和上文中的 close() 方法使用的情况类似,clearTimeout()在使用时必须通过 id 值 指定某个特定的定时器。

而实际上, 每一个 setTimeout()方法都会返回一个独特的 id 值,这个 id 值指代了这个定时器。

所以,我们可以使用其返回的这个id值来取消指定的setTimeout定时器。

语法:

clearTimeout(id);
//id 值为特定的 setTimeout() 返回的 id 值

基本用法:

//在 3 秒后弹出一个警告框
var id = setTimeout("alert('lololol');",3000);
//取消该弹出操作
clearTimeout(id);

setInterval:指定每过一个时间间隔执行一次(多次执行)

假定这样一个情况:由于页面的数据需要实时性,所以每隔一段时间就需要刷新一次页面更新数据。

为了实现这个需求,我们就需要一个每隔一段时间自动执行的代码,它可以帮我们自动拉取并更新数据。

setInterval 方法的用法就是按照指定的周期(以毫秒计)来调用函数或计算表达式(循环调用)

语法 :

setInterval(code,millisec);
//code 为函数每个周期所执行的 JavaScript 代码
//millisec 指定每隔多少时间(毫秒)执行函数中的方法

基本用法:

//每过 2s 向 html 文档中写入数字 2
setInterval("document.write('2');",2000);

setTimeout() 设定的定时器可以被 clearTimeout()取消一样。setInterval()设定的循环定时器也可以被取消,对应的取消方法为 clearInterval()

语法:

clearInterval(id);
//id 值为特定的 setInterval() 返回的id值

基本用法:

//每过 2s 向 html 文档中写入数字 2
var id = setInterval("document.write('2');",2000);
//过 4s 后取消循环写入数字 2 操作
setTimeout("clearInterval(id);",4000);

3、Window 对象的属性

从上篇文章中的图片中,我们可以清晰的看到,其实在 BOM 中,window 对象就已经包含了大部分的对象,而通过对 window 对象的属性访问,同样可以获取到其他的 BOM 对象的引用。

以下是各个 BOM 对象通过 window 对象获取的方式:

属性名描述通过window对象获取方法
history对 History 对象的只读引用window.history
location对 Location 对象的只读引用window.location
navigator对 Navigator 对象的只读引用window.navigator
screen对 Screen 对象的只读引用window.screen

还有还有一个最重要的对象: document 对象,也是 window 对象的一部分。

也就是说,可以使用如下方法获取 document 对象的引用:

window.document;

在前面的点击切换图片的小案例中,我们使用了这个方法 : document.getElementByID()

其实也可以通过如下方式使用该方法:

window.document.getElementById();

我们一般都会将前面的 window 省去,就像 window 中的各种方法一样,直接使用。

但我们还是要了解,其实 无论是 BOM 还是 DOM,window 对象都是其核心


二、Location对象

1、使用(调用)方式

location 对象代表浏览器窗口中的地址栏,和 window 对象一样,无需特殊的创建方式,通过对象名就可使用,并调用其中的方法:

location.方法名()

而由于 location 对象属于 window 对象的一部分,所以也可以这样写:

window.location.方法名();

2、Location方法

location 对象中的方法及用法如下:

方法名方法描述
assign()加载新的文档。
reload()重新加载当前文档。
replace()用新文档替换当前文档。

由于这三个方法使用都比较简单,就不细分叙述了,基本使用如下代码所示:

<body>
    
    <input type="button" value="assign" id="assign">
    <input type="button" value="reload" id="reload">
    <input type="button" value="replace" id="replace">

</body>

<script>
    /**
     * 加载新文档,参数为URL地址,会产生历史记录
     */
   
    document.getElementById("assign").onclick = function(){
        location.assign("http://www.baidu.com");
    } 
    /**
     * 重新加载文档,参数为一个布尔值,默认为false
     * 1.如该方法没有设定参数值或设定为false,那该方法会使用浏览器缓存来重新加载页面(浏览器默认刷新方式)
     * 2.如该方法参数值为true,那么该方法会无条件向服务器重新下载该文档并重新加载
     * 
     */ 
    document.getElementById("reload").onclick = function(){
        location.reload(true);
    }
    

    // /**
    //  * 替换当前文档,和 assign 方法类似 
    //  * 但是不会产生历史记录,也就是无法通过后退键返回上一个页面
    //  */
    document.getElementById("replace").onclick = function(){
        location.replace("http://www.baidu.com");
    }
    
</script>

效果演示:

3、Location属性

location 的属性如下:

属性描述
hash设置或返回从井号 (#) 开始的 URL(锚)。
host设置或返回主机名和当前 URL 的端口号。
hostname设置或返回当前 URL 的主机名。
href设置或返回完整的 URL。
pathname设置或返回当前 URL 的路径部分。
port设置或返回当前 URL 的端口号。
protocol设置或返回当前 URL 的协议。
search设置或返回从问号 (?) 开始的 URL(查询部分)。

各个属性的用法描述中已经很清楚了,我就不详细赘述了。

这里只提一个常用的属性:href,其功能为设置或返回完整的 URL 。

通过这个属性,我们可以获取浏览器地址栏的完整地址,或是设置地址为新地址,其用法如下:

<body>
	<input type="button" value="href获取" id="href01">
    <input type="button" value="href设置" id="href02">
</body>
<script>
	/**
     * href 属性
     * 设置或返回完整URL
     * 当其设置一个新href时,其效果和assign()一样,加载新URL,并产生历史记录
     */
    document.getElementById("href01").onclick = function(){
        alert(location.href);
    }

    document.getElementById("href02").onclick = function(){
        location.href = "http://www.baidu.com";
    }
</script>

效果演示:

三、History对象

1、使用(调用)方式

history 对象表示当前窗口的历史记录,同样通过对象名可以直接调用:

history.方法名();
history.属性名

history对象也属于 window 对象的一部分,所以也可以:

window.history.方法名();
window.history.属性名

2、History方法

在 history对象中,共有三个方法,它们分别为:

方法描述
back()加载当前窗口 history 列表中的前一个 URL。
forward()加载当前窗口 history 列表中的下一个 URL。
go()加载当前窗口 history 列表中的某个具体页面。

为了完成这三个方法的演示,我们需要两个html文档,第一个文档history00.html核心内容为:

<body>
    <a href="./history.html">去history对象页面</a>
</body>

第二个文档history.html核心内容为:

<body>
    <a href="http://www.baidu.com">打开一个页面</a>
    <input type="button" value="goForward前进" onclick="goForward()">
    <input type="button" value="goBack后退" onclick="goBack()">
    <input type="button" value="go去后一个页面" onclick="go()">
</body>
<script>

    /**
     * forward()方法
     * 加载当前窗口历史列表的前一个页面
     * 类似于浏览器中的前进按钮
     * 
     */ 
    function goForward() {
        history.forward();
    }

    /**
     * back()方法
     * 加载当前窗口历史列表的后一个页面
     * 类似于浏览器中的后退按钮
    */
    function goBack() {
        history.back();
    }
    
    /**
     * go()方法
     * 加载当前窗口历史列表的一个具体页面
     * 参数可以为一个URL或者一个数字,数字代表要访问的URL在历史记录的相对位置
     */ 
    function go() {
        //-1表示向后一个页面
        history.go(-1);
    }
</script>

效果演示:

3、History属性

history 对象只有一个属性:

属性描述
length返回浏览器历史列表中的 URL 数量。

用法:

history.length;

例子,在上面第二个html文档中添加:

	<body>
    <input type="button" value="获取历史记录数量" onclick="getLength()">
    </body>

    <script>
	/**
     *length属性
     * 显示当前窗口历史记录数量
     */ 
    function getLength() {
        alert(history.length);
    }
    <script>

演示:


结语

本节,我们介绍了 BOM 对象中的各个对象以及各个对象中的相关方法和属性,我们算是对 BOM 有一个大概的认识了。

下节,我们开始 DOM 的学习,探究 DOM 这个强大的文档对象。

举报

相关推荐

0 条评论