官术网_书友最值得收藏!

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);
主站蜘蛛池模板: 宜章县| 灵寿县| 台山市| 蓝田县| 临桂县| 辉南县| 汕头市| 哈尔滨市| 泰州市| 个旧市| 枣强县| 监利县| 清水县| 公主岭市| 饶平县| 新营市| 铜川市| 定安县| 武胜县| 新疆| 陇南市| 琼中| 柯坪县| 维西| 碌曲县| 镇巴县| 新津县| 怀化市| 凤阳县| 鄂伦春自治旗| 洛扎县| 睢宁县| 曲阳县| 三穗县| 上犹县| 定日县| 瑞金市| 福海县| 柳州市| 清河县| 乐业县|