- 看透JavaScript:原理、方法與實踐
- 韓路彪
- 838字
- 2020-11-28 15:50:49
8.2 Window對象的特殊性
瀏覽器的Global對象window是使用Window對象創(chuàng)建出來的,Window對象是function類型,window對象是object類型。用于創(chuàng)建window對象的Window對象跟我們自定義的function對象之間存在一些區(qū)別。下面就來給大家介紹幾點。
8.2.1 不可以創(chuàng)建對象
我們自己創(chuàng)建的function對象都可以使用new關鍵字來創(chuàng)建相應的object類型實例對象,但是Window對象不可以用于創(chuàng)建對象。這一點很容易理解,如果可以使用Window對象創(chuàng)建實例對象,那么創(chuàng)建出來的對象就不是全局對象了,并且也不是在進入執(zhí)行環(huán)境之前創(chuàng)建的,而是在進入執(zhí)行環(huán)境之后才創(chuàng)建的,這就不符合標準了,另外使用上也會造成混亂。因此Window對象是不可以直接使用new關鍵字來創(chuàng)建實例對象的。
除了Window對象之外,還有一些function類型對象也不可以用來創(chuàng)建對象。例如,Math對象就不可以創(chuàng)建實例對象,因為它主要是使用其中的方法屬性來完成各種數(shù)學運算的。另外,我們前面介紹過的包裝對象的prototype中function類型的屬性對象,例如Sting的prototype屬性對象中的indexOf、charAt等,它們的作用是完成具體的功能,因此也不可以使用它們來創(chuàng)建實例對象。
8.2.2 不可以作為方法調用
Window也不可以作為方法來調用,也就是說,在程序中直接調用Window()也是不可以的,并且這種用法也沒有實際意義。
8.2.3 變量就是屬性
在最外層定義的變量也叫作全局變量,與在function中定義的其他變量存在很大區(qū)別。在最外層定義的變量會自動成為window對象的屬性,而在普通function中變量和實例對象的屬性是完全沒關系的兩類數(shù)據(jù),例如下面的例子。
var v = 1; //通過修改this的屬性可以改變全局變量的值 this.v = 2; console.log(v); //2 //通過修改全局變量的值也可以修改window對象同名屬性的值 v = 3; console.log(window.v); //3 //我們自定義的方法中變量和實例對象的屬性是相互獨立的 function Obj(){ var v = 4; this.v = 5; console.log(v); } new Obj(); //4
從這個例子中可以看出,最外層定義的變量和this的屬性及全局對象window的同名屬性都是同一個,可以相互操作。但是,在我們自定義的function函數(shù)體內變量和屬性之間存在嚴格區(qū)分,不可以相互調用。
只有在最外層定義的變量和屬性可以相互調用,在其他情況下都不可以,這一點一定要記清楚。
另外,window對象本身也是自己的一個屬性。對于這點可以通過下面的方法獲取window對象的屬性來查看。
Object.getOwnPropertyNames(window);
- Practical UX Design
- 微服務設計原理與架構
- Java Web基礎與實例教程
- Apache Kafka Quick Start Guide
- Java系統(tǒng)化項目開發(fā)教程
- Java Web開發(fā)就該這樣學
- INSTANT Adobe Edge Inspect Starter
- Modern C++ Programming Cookbook
- ActionScript 3.0從入門到精通(視頻實戰(zhàn)版)
- Exploring SE for Android
- Hands-On Robotics Programming with C++
- 程序員必會的40種算法
- JavaScript Mobile Application Development
- 現(xiàn)代JavaScript編程:經典范例與實踐技巧
- C#從入門到精通(微視頻精編版)