DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> 私有屬性和使用JavaScript的信息隱藏
私有屬性和使用JavaScript的信息隱藏
編輯:AJAX詳解     

鐵桿的面向對象設計支持者會注意到,當使用prototype方法向JavaScript對象增加屬性和函數時,所增加的屬性和函數都是公用的,所有其他對象都能訪問。對於函數來說,這通常沒有問題,因為大多數函數都確實應當提供給外部客戶。但是對於屬性,面向對象設計的支持者就會指出,公有屬性違反了信息隱藏的概念,對象的屬性應當是私有的,因此外部客戶不能直接訪問。外部客戶只能通過公用可用的函數來訪問對象的私有屬性。

對於Javascript,同樣有可能創建外部客戶不能訪問的私有屬性,而只能通過對象的(公用)方法來訪問,但這一點很少有人知道。Douglas Crockford[3]提出了一種在JavaScript中創建私有屬性的方法。這種方法非常簡單,總結如下:

  • 私有屬性可以在構造函數中使用var關鍵字定義。
  • 私有屬性只能由特權函數(privileged function)公用訪問。特權函數就是在構造函數中使用this關鍵字定義的函數。外部客戶可以訪問特權函數,而且特權函數可以訪問對象的私有屬性。

下面來考慮前一個示例中的Vehicle類。假設你想讓wheelCount和curbWeightIn- Pounds屬性是私有的,並只能通過公用方法訪問。新的Vehicle對象如代碼清單5-4所示。

代碼清單5-4 重寫後的Vehicle對象

function Vehicle() {

var wheelCount = 4;

var curbWeightInPounds = 4000;

this.getWheelCount = function() {

 

return wheelCount;

}

 

this.setWheelCount = function(count) {

wheelCount = count;

}

this.getCurbWeightInPounds = function() {

return curbWeightInPounds;

}

this.setCurbWeightInPounds = function(weight) {

curbWeightInPounds = weight;

軟件開發網 www.mscto.com

 

this.refuel = function() {

return "Refueling Vehicle with regular 87 octane gasoline";

}

this.mainTasks = function() {

 

return "Driving to work, school, and the grocery store";

}

}

注意,wheelCount和curbWeightInPounds屬性都在構造函數中使用var關鍵字定義,這就使得這兩個屬性是私有屬性。屬性不再是公用的,如果想通過點記法訪問wheelCount屬性的值,如下:

var numberOfWheels = vehicle.wheelCount;

就會返回undefined,而不是wheelCount實際的值。

由於屬性現在是私有的,因此需要提供能訪問這些屬性的公用函數。getWheelCount、setWheelCount、getCurbWeightInPounds和setCurbWeightInPounds函數就是作此使用的。現在Vehicle對象可以保證只能通過公用函數訪問私有屬性,因此滿足了信息隱藏的概念

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved