我們接著前面的內容,來繼續探討JavaScript的物件導向的內容,今天這回我們主要學習下面幾個知識點:我們一個個來進行深入淺出的講解。
JS中的對象:
JavaScript是一種基於原型的物件導向的語言,沒有類的概念,所有的一切都派生自現有對象的一個副本。
對象分為以下兩類:
function對象,例如alert()函數可以使用參數改變此類對象的功能如alert(“abc”)。傳什麼列印出什麼。
object對象,這類對象無法像function類對象那樣調用,而且具有固定的功能。
為了提高使用效率,JavaScript提供了下列內建對象。
object是通用基礎對象,可以使用它來建立簡單的靜態對象,其簡寫是{}。
var obj=new Object();var obj={};
Function是被所有使用參數的對象複製的對象,也是在指令碼中定義函數時所建立的對象,其簡寫是function(){}。
var myFunction=new function(",");function myFunction(){}
Array是一種特殊的屬性和方法的集合,比如使用它的length屬性可以迭代操作這類對象,使用方括弧加序號也可以訪問它的屬性。其簡寫是[]。
var arry=new Array();var arry=[];
String、Boolean、Number分別用來表示字串、布爾值、數字。
除此之外還有Math、Date、RegExp及其它內建對象。
JS中繼承:
繼承是物件導向中重要的組成部分。當建立自己的對象時你可以擴充或繼承現有對象的屬性和方法。繼承為重用對象提供了便捷的途徑,這樣你就可以把精力完全集中於新的改進代碼中。
與傳統的物件導向語言不同,JavaScript是基於原型的物件導向者就導致無法從一個類擴充出另一個類的底層類結構。在JS中繼承是通過簡單的從一個對象原型向另一個對象原型複製方法而實現的。我們看一下這個例子:
<title>繼承</title><script type="text/javascript">function init(){var person={};person.getName=function(){alert("person name");};person.getAge=function(){alert("person age");};//建立另一個對象var student={};student.getStuNum=function(){alert("student stuNum");};student.getName=person.getName;person.getName=function(){alert("person1 name");};student.getAge=person.getAge;student.getName();person.getName();}window.onload=init;</script>
那麼結果是這樣的:
這就說明JS繼承只是通過簡單的從一個對象原型向另一個對象原型複製方法而實現的。
對象成員:
1、數組的兩種實現方案
順序數組、散列數組(key,value)
2、對象=關聯陣列=屬性包=儲存體
3、只有成員訪問這個操作。(JavaScript只有屬性,沒有方法)。我們認為惡屬性其實就是一個key(屬性名稱)和value(屬性值)。看個例子:
<script type="text/javascript">function init(){alert(document.body);}window.onload=init;</script>
我們啟動並執行結果是:
document.body在ie裡邊就是一個object;這就說明document.body其實就是一個對象,只不過瀏覽器是按照遵循的w3c標準的來應該顯示的。下面我們再列印一個東西:
<script type="text/javascript">function init(){alert(document.getElementById);}window.onload=init;</script>
我們列印出來的是一個:
其實就是一個function,是那麼一回事,當一個對象被傳遞到alert函數中時,那麼所有對象都是object的執行個體,由於object類有一個toString的方法,也就是當一個對象在alert中被調用的時候,實際上調用的是一個toString的方法,以便獲得一個字串的表示,那麼toString方法來源於基礎的object的對象,那麼該方法會將對象轉換成一個字串,那麼這個字串就是這個物件類型的名稱,所以就出現這個結果。
window對象:我們寫的大部分方法都是隸屬於window對象的。在這個例子中:
function myFunction(message){alert(message);}
該方法中實際上都是全域window的對象方法。所以myFunction("aaa")等同於window.myFunction("aaa");
範圍鏈:我們看個例子
<title>範圍鏈</title><script type="text/javascript">function override(){var alert=function(message){window.alert('override'+message);};alert('alert');window.alert('window.alert');}override();alert('alert from ouside');</script></head>
我們解析一下。我們定義了一個override,然後我們定義了一個alert function。這就相當於覆蓋了window本身的alert;然後我們想調用window本身的alert,那麼我們就得這麼寫:window.alert。然後我們下面的alert其實調用的還是我們定義的function,然後我們再寫window.alert的時候,用的還是window的alert。那麼外面的alert的呢,也是window調用的alert。所以就出來了這麼幾個結果:
這些基礎知識,不難,夠用就可以了。