国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript面向對象三大特征之封裝實例詳解

2024-05-06 15:36:43
字體:
來源:轉載
供稿:網友

本文實例講述了javascript面向對象三大特征之封裝。分享給大家供大家參考,具體如下:

封裝

封裝(Encapsulation):就是把對象內部數據和操作細節進行隱藏。很多面向對象語言都支持封裝特性,提供關鍵字如private來隱藏某些屬性和方法。要想訪問被封裝對象中的數據,只能使用對象專門提供的對外接口,這個接口一般為方法。調用該方法能夠獲取對象內部數據。

在JavaScript語言中沒有提供專門的信息封裝關鍵字,不過可以使用閉包來創建,只允許從對象內部訪問的方法和屬性。另外,接口也是數據封裝的一種工具,接口提供了外界訪問方法的約定。在應用開發中,所有類都應定義接口,類只向外提供已實現接口中規定的方法,任何別的方法都是隱藏的。其所有屬性都是私有的,外界只能通過接口中定義的存取操作與之打交道。

---引自 《jQuery開發從入門到精通》,不過原書有錯誤,或者可能是我錯買了盜版,不過下面代碼都是經過我修改的,沒有問題。

被動封裝

被動封裝:就是對對象內部數據進行適當約定,這種約定具有很強的主觀性,沒有強制性保證,主要針對公共對象而言。一般來說,JavaScript所包含的數據都是公開的,沒有隱私可言,其中的信息可以隨意被訪問。下面給出一個例子來闡述:

var Person = function (name,gender) { if(name === undefined) { throw new Error("name is necessary") } else { this.name = name; } if(gender === undefined) { throw new Error("gender is necessary") } else { this.gender = gender; }}var p = new Person("Tom",1); // 如果我們實例化的時候,如果傳遞參數錯誤了,將會報異常

為了數據安全,代碼中適當的增加了一些條件限制,避免非法信息侵入。

var Animal = function (species) { if(!this.checkSpecies(species)) { throw new Error('species is illegal'); } else { this.species = species; }}Animal.prototype = { checkSpecies:function(species){ // 檢測 species , 參數為 species , 合法返回true ,這里可自定義檢測邏輯 // 這里先讓它直接返回 true return true; }}var ani = new Animal("dog");

從更安全和擴展的角度來說,凡是類都應該定義接口,這樣能夠保證數據存取更加安全,同時也方便團隊的合作。內部私有方法檢測和接口措施可在一定程度上保護對象內部數據,但是他們也存在一個致命漏洞(這些屬性和方法可以被公開重置,面對公開覆蓋屬性和方法值,任何人都無法阻止這種行為。),比如這樣的:

var Util = function() {};Util.prototype = { _say:function(){ console.log("這里有一個私有的成員 _say方法"); }}// 下面我們來修改它Util.prototype._say = function(){ console.log('哈哈,我已經被修改了');}// 開始檢測var util = new Util;util._say(); // 哈哈,我已經被修改了            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 青田县| 汕尾市| 赞皇县| 阿克苏市| 竹溪县| 温州市| 万山特区| 晋城| 清水县| 广汉市| 日土县| 景东| 铜川市| 黔东| 临颍县| 张家港市| 如东县| 江门市| 新和县| 江西省| 德昌县| 尚义县| 盐城市| 博爱县| 蓬安县| 高雄县| 汾阳市| 竹北市| 靖州| 宁津县| 呈贡县| 明溪县| 濉溪县| 安化县| 安溪县| 青铜峡市| 临沂市| 宁都县| 吴桥县| 辛集市| 米脂县|