天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

很長一段時(shí)間以來(這里本人要幸災(zāi)樂禍地說),js是“一種點(diǎn)綴的作用,完成很有限的功能,諸如表單驗(yàn)證之類,其語言本身也一直被當(dāng)作過程化的語言使用,很難完成復(fù)雜的功能。”。但是(這里本人要苦大仇深、痛心疾首地說),“而Ajax的出現(xiàn)使得復(fù)雜腳本成為必需的組成部分,這就對(duì) JavaScript 程序設(shè)計(jì)提出了新的要求,很多Ajax應(yīng)用開始利用JavaScript面向?qū)ο蟮男再|(zhì)進(jìn)行開發(fā),使邏輯更加清晰。事實(shí)上,JavaScript 提供了完善的機(jī)制來實(shí)現(xiàn)面向?qū)ο蟮拈_發(fā)思想。”。額的神啊,本來就不想學(xué)不敢學(xué)的,現(xiàn)在不得不硬著頭皮學(xué)了。
這里關(guān)于對(duì)象就廢話這么多了。我們都知道面向?qū)ο缶幊痰娜齻€(gè)主要特點(diǎn)是:封裝、繼承和多態(tài)。下面就圍繞著這三個(gè)特點(diǎn),記錄一些學(xué)習(xí)心得。
好的,先從封裝性開始介紹,眾所周知,對(duì)象是封裝的最基本單位。封裝防止了程序相互依賴性而帶來的變動(dòng)影響。面向?qū)ο蟮姆庋b比傳統(tǒng)語言的封裝更為清晰、更為有力。Code is cheap.來看簡(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();
/* 拋開類的概念,從代碼的形式上來看,class1 就是一個(gè)函數(shù),那么是不是所有的函數(shù)都可以用new來操作呢?答案是肯定的。
JavaScript 中,函數(shù)和類就是一個(gè)概念,當(dāng)new 一個(gè)函數(shù)時(shí),就會(huì)返回一個(gè)對(duì)象。如果這個(gè)函數(shù)中沒有初始化類成員,那就會(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言中,抽象類中的虛方法必須先被聲明,但可以在其他方法中被調(diào)用。
而在JavaScript 中,虛方法就可以看 該類中沒有定義的方法,但已經(jīng)通過this 指針使用了。
和傳統(tǒng)面向?qū)ο蟛煌氖牵@里虛方法不需經(jīng)過聲明,而直接使用了。這些方法將在派生類
中實(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,無構(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)留意。再來看一下執(zhí)行的效果:

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

JavaScript技術(shù)javascript 面向?qū)ο缶幊袒A(chǔ):封裝,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 男人天堂2018亚洲男人天堂 | 日日摸夜夜添无码AVA片 | 榴莲推广APP网站入口下载安装 | 调教玩弄奶头乳夹开乳震动器 | 玛雅成人网 | 国产色婷亚洲99精品AV在 | 小黄文纯肉污到你湿 | 深夜释放自己污在线看 | 成人毛片免费在线观看 | 国产AV无码成人黄网站免费 | 高清一区二区亚洲欧美日韩 | 亚洲美女视频高清在线看 | 国产 高清 无码 在线播放 | 亚洲色爽视频在线观看 | 91精品一区二区综合在线 | av在线不卡中文网 | 国产扒开美女双腿屁股流白浆 | 青青草在现线免费观看 | 国产69精品久久久久观看软件 | 恋夜秀场1234手机视频在线观看 | 亚洲中文字幕永久在线全国 | 国产精品99| 久久草这在线观看免费 | 亚洲人视频在线观看 | 中文字幕乱码一区久久麻豆樱花 | 色拍拍噜噜噜啦啦新网站 | 国产在线自天天人人 | 国产亚洲精品久久久久久无码网站 | 在线观看成年人免费视频 | 亚洲永久精品AV在线观看 | 国产午夜人做人免费视频中文 | 精品久久久久久电影网 | 成人伊人青草久久综合网 | 国产亚洲欧美在线中文BT天堂网 | 欧美最猛黑人AAAAA片 | 日本超A大片在线观看 | 北岛玲手机在线观看视频观看 | 又长又大又粗又硬3p免费视频 | 18国产精品白浆在线观看免费 | 嫩草影院久久国产精品 | 国产91青青成人a在线 |