Javascript 面向物件程式設計
很長一段時間以來(這裡本人要幸災樂禍地說),js是“一種點綴的作用,完成很有限的功能,諸如表單驗證之類,其語言本身也一直被當作過程化的語言使用,很難完成複雜的功能。”。但是(這裡本人要苦大仇深、痛心疾首地說),“而Ajax的出現使得複雜指令碼成為必需的組成部分,這就對 JavaScript 程式設計提出了新的要求,很多Ajax應用開始利用JavaScript面向物件的性質進行開發,使邏輯更加清晰。事實上,JavaScript 提供了完善的機制來實現面向物件的開發思想。”。
這裡關於物件就廢話這麼多了。我們都知道面向物件程式設計的`三個主要特點是:封裝、繼承和多型。下面就圍繞著這三個特點,記錄一些學習心得。
好的,先從封裝性開始介紹,眾所周知,物件是封裝的最基本單位。封裝防止了程式相互依賴性而帶來的變動影響。面向物件的封裝比傳統語言的封裝更為清晰、更為有力。Code is cheap.來看簡單的程式碼:
// 定義函式的方式定義類
function class1() {
// 類成員的定義及建構函式
// 這裡class1 既是一個函式也是一個類。作為函式,它可以理解為類的建構函式, 負責初始化的工作。
}
// 使用new操作符獲得一個類的例項
var obj = new class1();
/* 拋開類的概念,從程式碼的形式上來看,class1 就是一個函式,那麼是不是所有的函式都可以用new來操作呢?答案是肯定的。
在JavaScript 中,函式和類就是一個概念,當new 一個函式時,就會返回一個物件。如果這個函式中沒有初始化類成員,那就會返回一個空的物件。
事實上,當new一個函式時,這個函式就是所代表類的建構函式,其中的所有程式碼都可以看作為了初始化一個物件而工作。用於表示類的函式也稱之為構造器。
在JavaScript 中,每個物件可以看作是多個屬性(方法)的集合
*/
function test() {
alert( typeof (obj));
}
上面的程式碼定義了一個類class1,這就是js中簡單的封裝,下面我們看js如何定義“靜態類”,
function class1() { // 建構函式
}
// 靜態屬性
icProperty = " test " ;
// 靜態方法
icMethod = function () {
alert(icProperty);
}
function test() {
// 呼叫靜態方法
icMethod();
alert( typeof (class1));
}
接著看“抽象類”:
/*
在傳統面嚮物件語言中,抽象類中的虛方法必須先被宣告,但可以在其他方法中被呼叫。
而在JavaScript 中,虛方法就可以看 該類中沒有定義的方法,但已經通過this 指標使用了。
和傳統面向物件不同的是,這裡虛方法不需經過宣告,而直接使用了。這些方法將在派生類
中實現
*/
// 定義extend 方法
nd = function (destination, source) {
for (property in source) {
destination[property] = source[property];
}
return destination;
}
nd = function (object) {
return y( this , [ this , object]);
}
// 定義一個抽象基類base,無建構函式
function base() { }
otype = {
initialize: function () {
this it(); // 呼叫了一個虛方法
}
}
// 定義class1
function class1() {
// 建構函式
}
// 讓class1繼承於base 並實現其中的oninit方法
otype = ( new base())nd({
oninit: function () { // 實現抽象基類中的oninit 虛方法
// oninit 函式的實現
}
});
我們看到,上面“讓class1繼承於base 並實現其中的oninit方法時”,使用了“繼承”的概念,請留意。再來看一下執行的效果:
function test() {
var obj = new class1();
it = function () { alert( " test " ); }
it();
}
-
如何理解Javascript的caller,callee,call,apply區別
在提到上述的概念之前,首先想說說javascript中函式的隱含引數:argumentsarguments該物件代表正在執行的函式和呼叫它的函式的引數。[function.]arguments[n]引數function:選項。當前正在執行的Function物件的名字。n:選項。要傳遞給Function物件的從0開始的引數值...
-
ASP.NET 2.0 程式的基礎知識
成員關係的概念在人類社會中是一個層次比較低的概念,源於希望屬於某個群組的意識。我們希望能覺得自己是某個團隊的一部分,讓別人知道我們是誰,因此Web搭上這個流行趨勢,採用這個概念只是時間早晚的問題。如果坐下來想一想曾經登入過多少個站點並在這些站點上儲存...
-
javascript包裝物件的用法
js物件是一種複合值:它是屬性或已命名值得集合。參考以下程式碼:vars="helloworld";varlen=th;在該例子中,s是字串,而字串不是物件,但為何會有屬性呢?其實只要引用了字串s的屬性,js就會將字串通過呼叫newString(s)的方式轉換為物件,該物件繼承了字串的方法,並被...
-
ASP 時間函式及獲取伺服器時間的寫法
一、常用的ASP時間函式1、now()獲取當前系統日期和時間,ASP輸出格式:<%=now()%>2、Year(now())獲取年份,ASP輸出格式:<%=year(now())%>3、Month(now())獲取當前月份,ASP輸出格式:<%=month(now())%>4、day(now())獲取當天數,ASP輸出格式:<%=day(now())%>5、hour(now())...