亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2009年08月21日 01:36:46   作者:  
“在面向?qū)ο蟮乃枷胫校詈诵牡母拍钪痪褪穷悺R粋€(gè)類表示了具有相似性質(zhì)的一類事物的抽象,通過(guò)實(shí)例化一個(gè)類,可以獲得屬于該類的一個(gè)實(shí)例(即對(duì)象)”。

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

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

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

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




上面的代碼定義了一個(gè)類class1,這就是js中簡(jiǎn)單的封裝,下面我們看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(yǔ)言中,抽象類中的虛方法必須先被聲明,但可以在其他方法中被調(diào)用。
而在JavaScript 中,虛方法就可以看 該類中沒(méi)有定義的方法,但已經(jīng)通過(guò)this 指針使用了。
和傳統(tǒng)面向?qū)ο蟛煌氖?,這里虛方法不需經(jīng)過(guò)聲明,而直接使用了。這些方法將在派生類
中實(shí)現(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]);
}
// 定義一個(gè)抽象基類base,無(wú)構(gòu)造函數(shù)
function base() { }
base.prototype = {
initialize: function () {
this .oninit(); // 調(diào)用了一個(gè)虛方法
}
}
// 定義class1
function class1() {
// 構(gòu)造函數(shù)
}
// 讓class1繼承于base 并實(shí)現(xiàn)其中的oninit方法
class1.prototype = ( new base()).extend({
oninit: function () { // 實(shí)現(xiàn)抽象基類中的oninit 虛方法
// oninit 函數(shù)的實(shí)現(xiàn)
}
});

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

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

相關(guān)文章

  • JavaScript 繼承詳解(二)

    JavaScript 繼承詳解(二)

    這一章我們將會(huì)重點(diǎn)介紹JavaScript中幾個(gè)重要的屬性(this、constructor、prototype), 這些屬性對(duì)于我們理解如何實(shí)現(xiàn)JavaScript中的類和繼承起著至關(guān)重要的作用。
    2009-07-07
  • JavaScript 面向?qū)ο笕腴T精簡(jiǎn)篇

    JavaScript 面向?qū)ο笕腴T精簡(jiǎn)篇

    圍繞面向?qū)ο蟮膸状箨P(guān)鍵字:封裝 ,繼承 ,多態(tài) ,展開(kāi)JavaScript面向?qū)ο?/div> 2009-03-03
  • Javascript 面向?qū)ο?重載

    Javascript 面向?qū)ο?重載

    在面向?qū)ο笳Z(yǔ)言里重載是很重要的一個(gè)特性,而JavaScript這個(gè)自稱面向?qū)ο蟮恼Z(yǔ)言竟然沒(méi)有直接提供重載的功能。
    2010-05-05
  • JS類的封裝及實(shí)現(xiàn)代碼

    JS類的封裝及實(shí)現(xiàn)代碼

    js并不是一種面向?qū)ο虻恼Z(yǔ)言, 沒(méi)有提供對(duì)類的支持, 因此我們不能像在傳統(tǒng)的語(yǔ)言里那樣 用class來(lái)定義類, 但我們可以利用js的閉包封裝機(jī)制來(lái)實(shí)現(xiàn)js類, 我們來(lái)封裝一個(gè)簡(jiǎn)的Shape類.
    2009-12-12
  • javascript最常用與實(shí)用的創(chuàng)建類的代碼

    javascript最常用與實(shí)用的創(chuàng)建類的代碼

    組合構(gòu)造函數(shù)模式和原型模式
    2010-08-08
  • javascript 面向?qū)ο缶幊袒A(chǔ):繼承

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

    "繼承是面向?qū)ο箝_(kāi)發(fā)的又一個(gè)重要概念,它可以將現(xiàn)實(shí)生活的概念對(duì)應(yīng)帶程序邏輯中"?!? 雖然在JavaScript中沒(méi)有專門的機(jī)制來(lái)實(shí)現(xiàn)類的繼承,但可以通過(guò)拷貝一個(gè)類的prototype 到另外一個(gè)類來(lái)實(shí)現(xiàn)繼承”。
    2009-08-08
  • 手把手教你自己寫一個(gè)js表單驗(yàn)證框架的方法

    手把手教你自己寫一個(gè)js表單驗(yàn)證框架的方法

    其實(shí)我自己也就能簡(jiǎn)單用用js而已,但是呢,相對(duì)很多初學(xué)者來(lái)說(shuō)多懂了點(diǎn)Know How所以斗膽孟浪一下,將一些所得記錄下來(lái),以供更多的初學(xué)者能夠知道一個(gè)東西的實(shí)現(xiàn)過(guò)程,省去在源碼里摸索的過(guò)程。
    2010-09-09
  • 一個(gè)簡(jiǎn)單的javascript類定義例子

    一個(gè)簡(jiǎn)單的javascript類定義例子

    涵蓋了javascript公有成員定義、私有成員定義、特權(quán)方法定義的簡(jiǎn)單示例
    2009-09-09
  • Javascript 面向?qū)ο缶幊蹋ㄒ唬?封裝

    Javascript 面向?qū)ο缶幊蹋ㄒ唬?封裝

    我覺(jué)得,Object(對(duì)象)最難。因?yàn)镴avascript的Object模型很獨(dú)特,和其他語(yǔ)言都不一樣,初學(xué)者不容易掌握。
    2011-08-08
  • 面向?qū)ο蟮腏avascript之三(封裝和信息隱藏)

    面向?qū)ο蟮腏avascript之三(封裝和信息隱藏)

    在"初識(shí)Javascript"章節(jié)中,提到通過(guò)作用域和閉包來(lái)隱藏內(nèi)部細(xì)節(jié),并給外部提供訪問(wèn)接口,就初次接觸到了信息隱藏的概念了
    2012-01-01

最新評(píng)論