一起來學(xué)習(xí)JavaScript的BOM操作
window對象
BOM的核心對象是window,它表示瀏覽器的一個(gè)實(shí)例。在瀏覽器中,window對象有雙重角色,它既是通過JavaScript訪問瀏覽器窗口的一個(gè)接口,又是ECMAScript規(guī)定的Global對象。這意味著在網(wǎng)頁中定義的任何一個(gè)對象、變量和函數(shù),都以window作為其Global對象,因此有權(quán)訪問parseInt()等方法。
全局作用域
由于window對象同時(shí)扮演著ECMAScript中Global對象的角色,因此所有在全局作用域中聲明的變量、函數(shù)都會(huì)變成window對象的屬性和方法。來看下面的例子。

我們在全局作用域中定義了一個(gè)變量name和一個(gè)函數(shù)sayName(),它們被自動(dòng)歸在了window對象名下。于是,可以通過window.name訪問變量name,可以通過window.sayAge()訪問函數(shù)sayName()。由于sayName()存在于全局作用域中,因此this.name被映射到window.name,最終顯示的仍然是正確的結(jié)果。
常見事件
window對象也有一些自己的事件,這里我們用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<script>
window.addEventListener('load', function () {
var btn = document.querySelector('button');
btn.addEventListener('click', function () {
alert('點(diǎn)擊我');
});
});
window.addEventListener('load', function () {
alert(22);
});
document.addEventListener('DOMContentLoaded', function () {
alert(33);
});
// load 等頁面內(nèi)容全部加載完畢,包含頁面dom元素 圖片 flash css 等等
// DOMContentLoaded 是DOM 加載完畢,不包含圖片 falsh css 等就可以執(zhí)行 加載速度比 load更快一些
</script>
</head>
<body>
<button>點(diǎn)擊</button>
</body>
</html>
調(diào)節(jié)窗口大小
比如下面這個(gè)案例,當(dāng)我們把網(wǎng)頁縮放到800的時(shí)候盒子就會(huì)消失不見。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<style>
div {
width: 200px;
height: 200px;
background-color: pink;
}
</style>
</head>
<body>
<script>
window.addEventListener('load', function () {
var div = document.querySelector('div');
window.addEventListener('resize', function () {
console.log(window.innerWidth);
console.log('變化了');
if (window.innerWidth <= 800) {
div.style.display = 'none';
} else {
div.style.display = 'block';
}
});
});
</script>
<div></div>
</body>
</html>
定時(shí)器setTimeout
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<script>
// 1. setTimeout
// 語法規(guī)范: window.setTimeout(調(diào)用函數(shù), 延時(shí)時(shí)間);
// 1. 這個(gè)window在調(diào)用的時(shí)候可以省略
// 2. 這個(gè)延時(shí)時(shí)間單位是毫秒 但是可以省略,如果省略默認(rèn)的是0
// 3. 這個(gè)調(diào)用函數(shù)可以直接寫函數(shù) 還可以寫 函數(shù)名 還有一個(gè)寫法 '函數(shù)名()'
// 4. 頁面中可能有很多的定時(shí)器,我們經(jīng)常給定時(shí)器加標(biāo)識符 (名字)
// setTimeout(function() {
// console.log('時(shí)間到了');
// }, 2000);
function callback() {
console.log('執(zhí)行力');
}
var timer1 = setTimeout(callback, 3000);
var timer2 = setTimeout(callback, 5000);
// setTimeout('callback()', 3000); // 我們不提倡這個(gè)寫法
</script>
</body>
</html>
this指向問題
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<button>點(diǎn)擊</button>
<script>
// this 指向問題 一般情況下this的最終指向的是那個(gè)調(diào)用它的對象
// 1. 全局作用域或者普通函數(shù)中this指向全局對象window( 注意定時(shí)器里面的this指向window)
console.log(this);
function fn() {
console.log(this);
}
window.fn();
window.setTimeout(function () {
console.log(this);
}, 1000);
// 2. 方法調(diào)用中誰調(diào)用this指向誰
var o = {
sayHi: function () {
console.log(this); // this指向的是 o 這個(gè)對象
},
};
o.sayHi();
var btn = document.querySelector('button');
// btn.onclick = function() {
// console.log(this); // this指向的是btn這個(gè)按鈕對象
// }
btn.addEventListener('click', function () {
console.log(this); // this指向的是btn這個(gè)按鈕對象
});
// 3. 構(gòu)造函數(shù)中this指向構(gòu)造函數(shù)的實(shí)例
function Fun() {
console.log(this); // this 指向的是fun 實(shí)例對象
}
var fun = new Fun();
</script>
</body>
</html>
location對象
轉(zhuǎn)跳頁面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<button>點(diǎn)擊</button>
<div></div>
<script>
var btn = document.querySelector('button');
var div = document.querySelector('div');
btn.addEventListener('click', function() {
// console.log(location.href);
location.;
})
var timer = 5;
setInterval(function() {
if (timer == 0) {
location.;
} else {
div.innerHTML = '您將在' + timer + '秒鐘之后跳轉(zhuǎn)到首頁';
timer--;
}
}, 1000);
</script>
</body>
</html>
location常見方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<button>點(diǎn)擊</button>
<script>
var btn = document.querySelector('button');
btn.addEventListener('click', function () {
// 記錄瀏覽歷史,所以可以實(shí)現(xiàn)后退功能
// location.assign('http://www.itcast.cn');
// 不記錄瀏覽歷史,所以不可以實(shí)現(xiàn)后退功能
// location.replace('http://www.itcast.cn');
location.reload(true);
});
</script>
</body>
</html>
總結(jié)
瀏覽器對象模型(BOM)以window對象為依托,表示瀏覽器窗口以及頁面可見區(qū)域。同時(shí),window對象還是ECMAScript中的Global對象,因而所有全局變量和函數(shù)都是它的屬性,且所有原生的構(gòu)造函數(shù)及其他函數(shù)也都存在于它的命名空間下。
- 在使用框架時(shí),每個(gè)框架都有自己的window對象以及所有原生構(gòu)造函數(shù)及其他函數(shù)的副本。每個(gè)框架都保存在frames集合中,可以通過位置或通過名稱來訪問。
- 有一些窗口指針,可以用來引用其他框架,包括父框架。
- top對象始終指向最外圍的框架,也就是整個(gè)瀏覽器窗口。
- parent對象表示包含當(dāng)前框架的框架,而self對象則回指window。
- 使用location對象可以通過編程方式來訪問瀏覽器的導(dǎo)航系統(tǒng)。設(shè)置相應(yīng)的屬性,可以逐段或整體性地修改瀏覽器的URL。
- 調(diào)用replace()方法可以導(dǎo)航到一個(gè)新URL,同時(shí)該URL會(huì)替換瀏覽器歷史記錄中當(dāng)前顯示的頁面。架都有自己的window對象以及所有原生構(gòu)造函數(shù)及其他函數(shù)的副本。每個(gè)框架都保存在frames集合中,可以通過位置或通過名稱來訪問。
- 有一些窗口指針,可以用來引用其他框架,包括父框架。
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
JavaScript設(shè)計(jì)模式之原型模式分析【ES5與ES6】
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之原型模式,簡單描述了原型模式的概念、原理,并結(jié)合實(shí)例形式分析了ES5與ES6實(shí)現(xiàn)原型模式的相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
JavaScript引擎實(shí)現(xiàn)async/await的方法實(shí)例
大家應(yīng)該都知道隨著Node 7的發(fā)布,越來越多的人開始研究據(jù)說是異步編程終級解決方案的async/await,下面這篇文章主要給大家介紹了關(guān)于JavaScript引擎是如何實(shí)現(xiàn)async/await的相關(guān)資料,需要的朋友可以參考下2022-03-03
JS中的Replace()傳入函數(shù)時(shí)的用法詳解
這篇文章主要介紹了JS中的Replace()傳入函數(shù)時(shí)的用法詳解,replace方法的語法是:stringObj.replace(rgExp, replaceText)關(guān)于js replace 傳入函數(shù)的用法,大家通過本文學(xué)習(xí)吧2017-09-09
JS模式之簡單的訂閱者和發(fā)布者模式完整實(shí)例
這篇文章主要介紹了JS模式之簡單的訂閱者和發(fā)布者模式,以一個(gè)完整實(shí)例形式詳細(xì)分析了JS訂閱者和發(fā)布者模式基本實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-06-06
跟我學(xué)習(xí)javascript創(chuàng)建對象(類)的8種方法
跟我學(xué)習(xí)javascript創(chuàng)建對象(類)的8種方法,每一種方法都有詳細(xì)的介紹,不知道javascript如何創(chuàng)建對象的朋友,不要錯(cuò)過這篇文章。2015-11-11
Threejs實(shí)現(xiàn)滴滴官網(wǎng)首頁地球動(dòng)畫功能
這篇文章主要介紹了Threejs實(shí)現(xiàn)滴滴官網(wǎng)首頁地球動(dòng)畫效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07

