国产探花免费观看_亚洲丰满少妇自慰呻吟_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(); // 哈哈,我已經被修改了            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 汕尾市| 高州市| 焦作市| 甘德县| 朝阳市| 广宗县| 乌兰察布市| 神池县| 永德县| 武安市| 临西县| 仁布县| 滕州市| 扶沟县| 胶南市| 平陆县| 金昌市| 淮阳县| 汝城县| 中方县| 扬州市| 奉新县| 兴文县| 乃东县| 吕梁市| 镇原县| 上犹县| 宝丰县| 页游| 桂林市| 鹤岗市| 婺源县| 屯门区| 疏附县| 寻甸| 喀喇| 江华| 临武县| 康乐县| 尼木县| 神木县|