最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript 面向?qū)ο缶幊袒A(chǔ):封裝

 更新時間:2009年08月21日 01:36:46   作者:  
“在面向?qū)ο蟮乃枷胫?,最核心的概念之一就是類。一個類表示了具有相似性質(zhì)的一類事物的抽象,通過實例化一個類,可以獲得屬于該類的一個實例(即對象)”。

很長一段時間以來(這里本人要幸災(zāi)樂禍地說),js是“一種點綴的作用,完成很有限的功能,諸如表單驗證之類,其語言本身也一直被當作過程化的語言使用,很難完成復(fù)雜的功能?!?。但是(這里本人要苦大仇深、痛心疾首地說),“而Ajax的出現(xiàn)使得復(fù)雜腳本成為必需的組成部分,這就對 JavaScript 程序設(shè)計提出了新的要求,很多Ajax應(yīng)用開始利用JavaScript面向?qū)ο蟮男再|(zhì)進行開發(fā),使邏輯更加清晰。事實上,JavaScript 提供了完善的機制來實現(xiàn)面向?qū)ο蟮拈_發(fā)思想?!薄n~的神啊,本來就不想學(xué)不敢學(xué)的,現(xiàn)在不得不硬著頭皮學(xué)了。
這里關(guān)于對象就廢話這么多了。我們都知道面向?qū)ο缶幊痰娜齻€主要特點是:封裝、繼承和多態(tài)。下面就圍繞著這三個特點,記錄一些學(xué)習(xí)心得。
好的,先從封裝性開始介紹,眾所周知,對象是封裝的最基本單位。封裝防止了程序相互依賴性而帶來的變動影響。面向?qū)ο蟮姆庋b比傳統(tǒng)語言的封裝更為清晰、更為有力。Code is cheap.來看簡單的代碼:

// 定義函數(shù)的方式定義類
function class1() {
// 類成員的定義及構(gòu)造函數(shù)
// 這里class1 既是一個函數(shù)也是一個類。作為函數(shù),它可以理解為類的構(gòu)造函數(shù), 負責(zé)初始化的工作。
}

// 使用new操作符獲得一個類的實例
var obj = new class1();
/* 拋開類的概念,從代碼的形式上來看,class1 就是一個函數(shù),那么是不是所有的函數(shù)都可以用new來操作呢?答案是肯定的。
在JavaScript 中,函數(shù)和類就是一個概念,當new 一個函數(shù)時,就會返回一個對象。如果這個函數(shù)中沒有初始化類成員,那就會返回一個空的對象。
事實上,當new一個函數(shù)時,這個函數(shù)就是所代表類的構(gòu)造函數(shù),其中的所有代碼都可以看作為了初始化一個對象而工作。用于表示類的函數(shù)也稱之為構(gòu)造器。
在JavaScript 中,每個對象可以看作是多個屬性(方法)的集合
*/

function test() {
alert( typeof (obj));
}




上面的代碼定義了一個類class1,這就是js中簡單的封裝,下面我們看js如何定義“靜態(tài)類”,

function class1() { // 構(gòu)造函數(shù)
}
// 靜態(tài)屬性
class1.staticProperty = " test " ;
// 靜態(tài)方法
class1.staticMethod = function () {
alert(class1.staticProperty);
}

function test() {
// 調(diào)用靜態(tài)方法
class1.staticMethod();
alert( typeof (class1));

}

接著看“抽象類”:

/*
在傳統(tǒng)面向?qū)ο笳Z言中,抽象類中的虛方法必須先被聲明,但可以在其他方法中被調(diào)用。
而在JavaScript 中,虛方法就可以看 該類中沒有定義的方法,但已經(jīng)通過this 指針使用了。
和傳統(tǒng)面向?qū)ο蟛煌氖牵@里虛方法不需經(jīng)過聲明,而直接使用了。這些方法將在派生類
中實現(xiàn)
*/

// 定義extend 方法
Object.extend = function (destination, source) {
for (property in source) {
destination[property] = source[property];
}
return destination;
}
Object.prototype.extend = function (object) {
return Object.extend.apply( this , [ this , object]);
}
// 定義一個抽象基類base,無構(gòu)造函數(shù)
function base() { }
base.prototype = {
initialize: function () {
this .oninit(); // 調(diào)用了一個虛方法
}
}
// 定義class1
function class1() {
// 構(gòu)造函數(shù)
}
// 讓class1繼承于base 并實現(xiàn)其中的oninit方法
class1.prototype = ( new base()).extend({
oninit: function () { // 實現(xiàn)抽象基類中的oninit 虛方法
// oninit 函數(shù)的實現(xiàn)
}
});

我們看到,上面“讓class1繼承于base 并實現(xiàn)其中的oninit方法時”,使用了“繼承”的概念,請留意。再來看一下執(zhí)行的效果:

function test() {
var obj = new class1();
obj.oninit = function () { alert( " test " ); }
obj.oninit();
}

相關(guān)文章

  • 手把手教你自己寫一個js表單驗證框架的方法

    手把手教你自己寫一個js表單驗證框架的方法

    其實我自己也就能簡單用用js而已,但是呢,相對很多初學(xué)者來說多懂了點Know How所以斗膽孟浪一下,將一些所得記錄下來,以供更多的初學(xué)者能夠知道一個東西的實現(xiàn)過程,省去在源碼里摸索的過程。
    2010-09-09
  • javascript 面向?qū)ο蟮腏avaScript類

    javascript 面向?qū)ο蟮腏avaScript類

    這一節(jié)來說下緊接著的一個概念——類。雖然JavaScript中沒有class關(guān)鍵字,但作為開發(fā)人員我們一定要有這個思想。在C#中類可以分為實例類和靜態(tài)類,JavaScript亦然。
    2010-05-05
  • 最新評論

    广丰县| 保德县| 西华县| 蒙山县| 宜州市| 陇川县| 乡城县| 丽水市| 锡林浩特市| 古交市| 洪洞县| 闸北区| 昌平区| 广丰县| 崇左市| 桑日县| 九江市| 中山市| 汾阳市| 苗栗县| 南京市| 广饶县| 宁陵县| 陇南市| 镇宁| 河西区| 西城区| 文成县| 东山县| 贡嘎县| 兴和县| 迭部县| 额济纳旗| 诸城市| 平武县| 阳山县| 双峰县| 大安市| 基隆市| 菏泽市| 芷江|