日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript 類的封裝操作示例詳解

瀏覽:41日期:2023-10-26 16:48:55

本文實例講述了JavaScript 類的封裝操作。分享給大家供大家參考,具體如下:

一,首先,為什么要使用封裝?

這是從信息的角度出發的,信息的隱藏是最終的目的,而封裝只不過是實現隱藏的一種方法。

這里我們需要明白一點就是:類的定義有如下的三種方式:

(第一種)門戶大開型方式 (第二種)用命令規范區別私有和公有的方式 (第三種)閉包

現在詳細描述一下每一種類的定義方式:

針對第一種,門戶大開類型

首先,我們來看一種情況

(1)聲明一個簡單的類,代碼如下

function Person(age,name) { this.name=name;this.age=age; }

(2)實例化類+調用

var p=new Person(-10,'小明');alert(p.age)//結果出現年齡出現負數

從上述的運行結果中,我們可以看出程序可以正常執行,但這并符合實際,因為年齡出現 了負數,這不是我們想要的,我們需要一個能正確處理并產生與實際情況相符的解決方案。

為了能解決上述年齡出現的問題,我們可以這樣做:擴展類的原型鏈

Person.prototype={ checkAge:function (age) { if(0<age&&age<150){ return true; }else { return false;} } }

加上解決方案后,代碼如下

(1)基本類

function Person(age,name) { this.name=name; //調用方法判斷驗證 if(!this.checkAge(age)){ throw new Error('年齡必須在0-150之間'); } this.age=age; }

(2)年齡判斷驗證

Person.prototype={ checkAge:function (age) { if(0<age&&age<150){ return true; }else { return false; } } }

(3)調用

var p2=new Person(10,'小明');alert(p2.age)

我們還可以給name添加一個讀取驗證,name為空時使用默認值 同樣是擴展類的原型鏈

代碼如下,

Person.prototype['getName']=function () {return this.name||'我是默認的'; }//調用

var p3=new Person(10,'');alert(p3.getName())//結果為“我是默認的”

總結一下:當類被定義為門戶大開類型時會出現與實際不符合的情況 ,雖然我們可以加在類上擴展原型類加驗證方法解決,但是這樣會使類變得臃腫。

針對第二種,用命名規范區別私有和公有

步驟如下,

(1)定義類 在類中定義變量(私有和公有變量)+驗證方法的調用

//用命名規范來區別私有和公有 function Person(name,age,email) { //定義私有變量 this._name;//私有 this.setName(name);//只是方法的調用,方法中有驗證,而不是在類中驗證 this._age;//私有 this.setAge(age); this.email=email;//公有的 }

(2)在類的原型上面 擴展賦值方法

Person.prototype={//直接擴展至原型上,可以在本類的內部使用this調用 setName:function (name) { this._name=name; }, setAge:function (age) { //需要做判斷符號實際情況 if(age>0&&age<150){//驗證不在類中,類不會變的臃腫this._age=age; }else {throw new Error('年齡必須是在0到150范圍內') } } }

(3)應用

var text1=new Person('測試',-10,'qq.com'); alert(text1._age)//-10 程序會報錯 這是我們想要的(說明驗證是對的)

var p2=new Person('測試2',10,'qq.cpm'); alert(p2._age)//程序正常運行 達到我們的目標

總結一下:在類的定義是使用命名規范來定義私有變量和公有變量,并將驗證方法和賦值方法擴展到本類的原型鏈上,在類中調用方法即可(會有返回值),這樣不會導致類的臃腫。

針對第三種,閉包實現封裝

這種方式有點像高級語言,在定義類是使用get,set方法實現數據的操作

(1)定義一個基本類(變量+操作變量的方法)

function Person(name,age,email) { //(1)聲明變量和對變量進行操作的get和set方法 this.email=email;//公有變量 //get方法 this.getName=function (name){ return this.name;//為什么是this調用呢?請看set方法 } this.getAge=function (age){ return this.age; } //set方法 這里相當于在類上的擴展 this.setName=function (name) { this.name=name;//Person.prototype.name 這里寫明了get中this的寫法的來源 } this.setAge=function (age) { if(age>0&&age<150){this.age=age;//Person.prototype.name 這里寫明了get中this的寫法的來源 }else {throw new Error('年齡必須是在0到150范圍內'); } } //(2)寫一個構造函數 做初始化 實現閉包 確保set是在get之前的,不然get時會出現錯誤 this.init=function () { this.setName(name); this.setAge(age); } this.init();//顯示調用 }

(2)應用

var p=new Person('text',-10,'qq.com'); alert(p.age)//程序由于不符合實際而被阻斷,符合要求

注:額外的閉包寫法 var 方式

var _sex='M'; this.getSex=function () { return _sex; } this.setSex=function () {_sex=sex; }

總結一下:

(1)這里只是函數和屬性的簡單封裝,還有更為復雜是業務需要封裝,使用get和set方法時,需要一個構造函數用于兩者先后順序的初始化實現閉包,之后顯示調用,確保set是在get之前的。

(2)閉包的實現,是通過get和set實現的,this.方式賦值時沒有暴露在外面而是通過get,set方法實現閉包。

二,靜態化

普通屬性和函數是作用在對象上到,而靜態函數是定義到類上的。

第一種靜態函數的寫法 :寫在類上

(1)首先,定義一個簡單的類,例如

function Person(name,age) { this.name=name; this.age;age; this.showName=function () { alert(this.name); } }

(2)定義一個寫在類上的方法,Person.add --》(類.函數)或者(類.屬性),例如

Person.add=function (x,y) { return x+y; }

(3)應用

alert(Person.add(10,20));//結果為30

總結一下,該種定義方式有點類似于高級語言的靜態類,使用與高級語言的相同通過類直接調用。

第二種靜態函數的寫法 :使用類中類的方式完成每一個對象全擁有當前類中相同的屬性和函數 。注意: 類中類的方式是一次性賦值的

(1)類的定義格式如下

var cat=(function () { //私有靜態屬性 var AGE=1; function add(x,y) { return x+y; } return function () {//類中類 return返回的類中持有與上面類中相同的屬性與函數 則共同的AGE和add稱為靜態屬性和靜態函數 this.AGE=AGE; this.add=function (x,y) {return add(x,y) } } })()//實例化cat,實質是通過return實例化的

(2)應用

alert(new cat().add(1,3))//4 alert(new cat().AGE)//1

總結一下:從上面的代碼格式中我們不難看出在一個類中定義有私有的屬性和方法,與一個返回可以初始化本類私有靜態屬性和方法的類,該類我們稱為類中類。當我們實例化外層類時實質上是通過該類內部的類return實例化的。

封裝的優點:

(1)保護內部數據完整性是封裝一大用處(2)對象的重構變得輕松,(如果沒有封裝你敢動正在運用的代碼嗎?) 答案肯定是不敢的。(3)化模塊間的耦合

弊端:

(1)私有的方法會變得難以進行單元測試(2)使用封裝意味著與復雜的代碼打交道(3)最大問題封裝在JavaScript中很難實現 除非運用自如,否則到處封裝,使測試變得困難。

以上只是學習的初步理解,不好還希望多多理解。

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩午夜高潮| 久久亚洲国产精品一区二区| 婷婷成人在线| 美腿丝袜亚洲一区| 国产一精品一av一免费爽爽| 亚洲精品影院在线观看| 视频一区在线播放| 免费的成人av| 在线观看亚洲精品福利片| 国产精品av一区二区| 欧美精品羞羞答答| 婷婷激情久久| 好看的av在线不卡观看| 樱桃成人精品视频在线播放| 国产精品试看| 亚洲精品免费观看| 久久精品999| 欧美激情精品| 麻豆精品视频在线| 久久久久久亚洲精品美女| 国产福利资源一区| 老鸭窝一区二区久久精品| 精品久久久中文字幕| 国产aⅴ精品一区二区三区久久 | 女人天堂亚洲aⅴ在线观看| 亚洲午夜电影| 久久www成人_看片免费不卡| 在线视频亚洲| 亚洲区国产区| 国产亚洲高清在线观看| 久久av中文| 久久女人天堂| 日韩欧美1区| 日韩中文视频| 亚洲黄色在线| 日本在线一区二区三区| 国产欧美一区二区三区国产幕精品| 国产精品一区二区三区四区在线观看 | 午夜久久美女| 亚洲色图国产| 国产精品一区二区美女视频免费看| 牛牛精品成人免费视频| 久久午夜影院| 99久久精品网| 午夜亚洲福利| 精品久久一区| 99国产精品久久久久久久成人热| 亚州av一区| 91日韩免费| 亚洲欧美久久久| 国产伦精品一区二区三区视频 | 国产麻豆精品久久| 日韩不卡视频在线观看| 丝袜脚交一区二区| 国产精品久av福利在线观看| 国产suv精品一区| 九一精品国产| 日韩av黄色在线| 中文av在线全新| 国产精品婷婷| 麻豆精品在线播放| 极品裸体白嫩激情啪啪国产精品| 亚洲专区视频| 国产aⅴ精品一区二区三区久久| 一级欧洲+日本+国产| 日韩成人精品一区二区三区 | 免费在线成人网| 精品一区二区三区四区五区| 激情欧美一区| 欧美国产极品| 午夜久久免费观看| 国产乱人伦精品一区| 欧美日韩一二三四| 日韩av成人高清| 日韩精品一区二区三区免费观看| 亚洲精品精选| 日韩精品一卡| 国产精品高清一区二区| 婷婷综合五月| 国产成人精品一区二区三区视频 | 亚洲五月综合| 国产精品麻豆久久| 亚州欧美在线| 午夜国产一区二区| 黄色欧美在线| 日韩精品一区二区三区中文| 亚洲涩涩在线| 国产欧美日韩视频在线| 国产亚洲在线| 成人污污视频| 国产亚洲人成a在线v网站| 亚洲美洲欧洲综合国产一区 | 黄色网一区二区| 日本一不卡视频| 美女毛片一区二区三区四区| 欧美91在线|欧美| 亚洲午夜国产成人| 欧美va天堂| 国产盗摄——sm在线视频| 日韩欧美中文字幕在线视频| av一区二区高清| 国产精品久久观看| 亚洲免费成人av在线| 不卡中文字幕| 色婷婷狠狠五月综合天色拍| 精品国产一区二| 久久av电影| 国产精品一级| 欧美精品影院| 日本欧美韩国一区三区| 亚洲日韩视频| 免费在线观看一区二区三区| 99re国产精品| 国产视频一区欧美| japanese国产精品| 99精品综合| 日韩精品中文字幕第1页| 日韩精品免费视频人成| 亚洲美洲欧洲综合国产一区| 在线日韩中文| 都市激情国产精品| 98精品视频| 国产精品自拍区| 亚洲久久一区| 黄色日韩在线| 久久久9色精品国产一区二区三区| 亚洲区第一页| 久久国产精品毛片| 超碰99在线| 日韩av电影一区| 亚洲精一区二区三区| 亚洲精品1区2区| 精品亚洲成人| 国产精品一区二区精品| 亚洲v天堂v手机在线| 99国产精品久久久久久久 | 久久青草久久| 国产在线观看91一区二区三区| 欧美一区成人| av亚洲免费| 精品99在线| 综合激情视频| 蜜臀av亚洲一区中文字幕| 91精品一区二区三区综合| 久久99国产精品视频| 日韩国产精品久久久| 日韩国产欧美在线播放| 日韩精品三级| 日韩欧美2区| 深夜福利一区| 一级成人国产| 99在线精品视频在线观看| 久久久久久黄| 国产99精品| 免费视频国产一区| 国产99亚洲| 国产精品久久久久蜜臀| 日韩a一区二区| 韩国女主播一区二区三区| 九九久久国产| 成人日韩av| 欧美激情亚洲| zzzwww在线看片免费| 国产网站在线| 麻豆久久久久久久| 久久精品影视| 不卡一区综合视频| 国产精品腿扒开做爽爽爽挤奶网站| 欧美国产91| 日韩视频一区二区三区在线播放免费观看 | 老鸭窝亚洲一区二区三区| 国产视频久久| 免费一级片91| 天堂va蜜桃一区二区三区| 久久亚洲风情| 在线亚洲精品| 四虎在线精品| 国产精品成人自拍| 精品视频自拍| av一区在线| 日韩午夜高潮| 亚洲91网站| 精品国产不卡一区二区| 精品国产亚洲一区二区三区在线 | 久久伊人国产| 欧美xxxx中国| 婷婷成人综合| 午夜在线视频观看日韩17c| 亚洲一区二区av| 青草国产精品| 国产精品v一区二区三区| 国产精品一线天粉嫩av| 日韩成人a**站| 久久久亚洲一区| 美女国产精品| 国产精品探花在线观看| 国产精品夜夜夜| 在线中文字幕播放| 激情综合网站| 欧美影院视频|