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

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() { // 構造函數
}
// 靜態屬性
class1.staticProperty = " test " ;
// 靜態方法
class1.staticMethod = function () {
alert(class1.staticProperty);
}

function test() {
// 調用靜態方法
class1.staticMethod();
alert( typeof (class1));

}

接著看“抽象類”:

/*
在傳統面向對象語言中,抽象類中的虛方法必須先被聲明,但可以在其他方法中被調用。
而在JavaScript 中,虛方法就可以看 該類中沒有定義的方法,但已經通過this 指針使用了。
和傳統面向對象不同的是,這里虛方法不需經過聲明,而直接使用了。這些方法將在派生類
中實現
*/

// 定義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,無構造函數
function base() { }
base.prototype = {
initialize: function () {
this .oninit(); // 調用了一個虛方法
}
}
// 定義class1
function class1() {
// 構造函數
}
// 讓class1繼承于base 并實現其中的oninit方法
class1.prototype = ( new base()).extend({
oninit: function () { // 實現抽象基類中的oninit 虛方法
// oninit 函數的實現
}
});

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

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

JavaScript技術javascript 面向對象編程基礎:封裝,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 美女扒开尿孔 | 神马老子影院午夜伦 | 高中生高潮抽搐喷出白浆视频 | 亚洲欧美偷拍视频一区 | 欧美 日韩 亚洲 在线 | 女教师二十三岁 | 色窝窝777欧美午夜精品影院 | 乌克兰14一18处交见血 | 在线广播收听 | 37大但人文艺术A级都市天气 | 99热久久久无码国产精品性麻豆 | 99久久精品国产自免费 | 国产亚洲日韩另类在线观看 | 日本枯瘦娇小 | 我的美女房东未删减版免费观看 | 精精国产www视频在线观看免费 | 《乳色吐息》无删减版在线观看 | 色窝窝亚洲AV在线观看 | 动漫美女脱小内内露尿口 | 欧美性xxxx18 | 日本动漫henta videos | 樱花动漫成人隐藏入口 | 国产97视频在线观看 | 两个人的视频日本在线观看完整 | 中文字幕视频在线观看 | 人人澡人人爽人人精品 | 她也色在线视频站 | 日韩免费一区二区三区在线 | 亚洲精品乱码8久久久久久日本 | 男女啪啪久久精品亚洲A | 精品国产乱码久久久久久乱码 | 校草让我脱了内裤给全班看 | 先锋资源av | 精品亚洲午夜久久久久 | 久久久久琪琪精品色 | 乡村教师电影版 | 飘雪韩国在线观看免费高清完整版 | 国精产品一区一区三区有限公司 | 国产嫩草影院精品免费网址 | 成人国产精品免费网站 | 特级毛片AAAAAA |