首先複習一下JavaScript基礎,以下內容爲轉載內容。
JavaScript OOP(1)面向對象基礎
這個是我的《Ajax完全自學手冊》一書第5章節選部分,還會有後續章節,陸續貼出
5.1 JavaScript中的對象
編程語言發展至今,基本上都是面向對象的語言。面向對象的語言十分優雅、便於學習和掌握、可以多次重用。在JavaScript中,大量使用內置對象。實際上,開發者可以利用JavaScript面向對象的特徵,定義類、對象,從而進行面向對象開發。
5.1.1 什麼是對象
在JavaScript中,沒有明確的對類、對象等概念定義,但是JavaScript用其自己的方式實現了這些概念。
一般面向對象的語言裏,對象被認爲是通過類的構造函數進行實例化的,即類的實例。所有的對象都是由類進行定義的,具有類中定義各種屬性和方法的實 例。在JavaScript中,這些特徵都得以實現。並且在JavaScript中,構造函數依然可以自定義,並且可以進行重載。
在JavaScript中的對象被認爲是特性的集合。特性可以是函數、也可以是普通的成員變量或其他類的引用。如果特性是1個函數,那麼該函數被認爲是當前對象的方法,普通的成員變量被認爲是對象的屬性。
5.1.2 聲明及實例化對象
JavaScript中,聲明對象的可以通過var關鍵字進行。示例代碼如下:
var obj;
JavaScript與其他面向對象的語言一樣,也定義了new關鍵字作爲實例化對象的操作符。實例化1個對象可以通過以下的代碼實現:
var obj1=new Object();
在JavaScript中,對象的類型由實例化的類型決定。
5.1.3 對象的引用及銷燬
在JavaScript中,變量可以存儲原始值和引用值。原始值被認爲存儲在棧中,擁有固定大小,可以直接操縱。引用值被認爲存儲在堆中,引用值僅僅是內存指針即實際對象的引用。
實際上在JavaScript中,有5種類型的對象被認爲是以原始值存儲的。undefined、boolean、number、string、 object5個類的對象大小固定,使用棧分配內存,故而被認爲是原始值。在這裏要特別指出的是null,null被認爲是指向空object對象的引 用。當運行以下代碼時,結果爲object。
function createObject()
{
var obj=null;
alert(typeof(obj));
}
當調用以上代碼時,讀者會看到提示框顯示object字樣。還要特別指出的是undefined,undefined類型只有1個值即undefined。當對象未實例化時或函數沒有明確的返回值時,就被認爲是undefined。示例代碼如下:
function createObject()
{
var obj;
alert(typeof(obj));
}
function doNothing()
{
}
var doSomething=doNothing();
alert(typeof(doSomething));
在JavaScript中支持typeof()運算符,可以動態分析對象的類型。在上例中,讀者一定已經看到了typeof()的使用。
JavaScript遵循ECMAScript標準,ECMAScript標準規定所有瀏覽器都必須支持無用存儲單元收集程序。當1個對象沒有任何引用時,會被無用存儲單元收集程序銷燬。所有局部變量在超出作用域或生命週期完結時,也會被無用存儲單元收集程序銷燬。
在JavaScript中,可以將對象引用設爲null,從而進行對象銷燬。
5.1.4 綁定機制
綁定機制是語言實現的關鍵,綁定機制是指將對象類型與對象實例緊密結合,通知編譯器當前對象具有什麼方法和屬性。
綁定機制有兩種,早期綁定和晚期綁定。
q 早期綁定:早期綁定是開發者最熟悉和使用最多的一種綁定方式。早期綁定具有這樣的特點:對象聲明時,對象的屬性和方法就被編譯成爲對象的一部分、對象的類 型一旦確定就不能進行隨意的更改、對象類型的變換必須遵循特定的規則。在Java、C#、VB.NET這樣的強類型語言中,都採用了早期綁定的方式。
晚期綁定:在一些弱類型的語言中,晚期綁定被大量使用。晚期綁定具有這樣的特點:對象聲明時,對象的屬性和方法並沒有編譯爲對象的一部分,而是在運 行期動態檢查對象是否具有相應的屬性和方法。在JavaScript等弱類型的語言中,都採用了晚期綁定的方式。晚期綁定導致這些弱類型語言不能進行實時 報錯。