js的面向?qū)ο?一) 這個話題已經(jīng)很久沒有人談了.高手懶得談,新手不敢談.最近計劃想寫一套網(wǎng)頁游戲的UI引擎,特地開貼寫篇文章,,與大家分享下js的面向?qū)ο筇匦约捌鋵崿F(xiàn),與大家共勉之. 主要是面向新手,因為多年前我也是新手,非??释懈呤忠徽刯s的面向?qū)ο? 以下總結(jié),是代表著自己的一種理解,我希望去培養(yǎng)程序員的一些直覺.而不是書本化的,很深入,很晦澀的知識.首先要理解以下這些概念: 1, js中函數(shù)可以當(dāng)做一種數(shù)據(jù)類型來看,而事實上他是一種Function對象的實例. 2, 函數(shù)與對象的對等性,在JS中對象一般采用函數(shù)來定義。 3, js中的變量的作用域是詞法性的. 下面先對這些進行一下說明: 1, js中函數(shù)可以當(dāng)做一種數(shù)據(jù)類型 在js中變量都是可變類型的,但是并不是沒有類型,看如下代碼: var a=1; var b="1"; alert(typeof a); //number alert(typeof b); //string alert(a+1); //2 alert(b+1); //11 通過以上代碼不難看出,即使你還可以寫 a="2";以改變a的類型,但是仍然應(yīng)該在任何時候清楚的明白變量的類型. 這種變量類型的易變性和對象的易變性 即是js的弊端,也是它如此強大的原因.他把自由留給了你,如果可以我們可以制定自己的編寫規(guī)范來約束自己而不是靠語言的實現(xiàn)本身. 下面說說函數(shù)的相關(guān)特性: function Person(){ alert("a"); } var Person=function(){ alert("b"); } 以上兩種寫法等價,都是定義了名為 Person的函數(shù),函數(shù)功能也相同,即彈出一個字符. 我們可以如下這樣調(diào)用: Person(); //事實上js引擎會認(rèn)為你給window增加了一個成員,以上等價于: window.Person=function(){ ... } //你也可以如下調(diào)用: window.Person(); alert(typeof Person) //function alert(typeof window.Person) //function function即為Person的數(shù)據(jù)類型 這也意味著,當(dāng)我們用window.open()打開一個窗口,或者在iframe等框架中要使這個方法,需要先獲得定義這個方法的window對象.如: |
|