11私有變量

私有變量
任何在函數中定義的變量,都可以認爲是私有變量,因爲不能再函數外部訪問這些變量,私有變量包括函數的參數,局部變量以及在函數內部定義的其他函數
如果在函數內部創建一個閉包,那麼閉包可以通過自己的作用域鏈來訪問這些變量,而利用這一點,就可以創建用於訪問私有變量的公有方法
    
     function Person(name){
         this.getName = function(){
         	return name;
         };
         this.setName = function(value){
         	name = value;
         }
     }
     var p = new Person("Nicho");
     alert(p.getName());
     p.setName("Mike");
     alert(p.getName());
問題:每次調用構造函數都會重新創建者兩個方法。

一.靜態私有變量
(function(){
	var name = "";
	Person = function(value){
		name = value;
	}
	Person.prototype.getName = function(){
		return name;
	};
	Person.prototype.setName = function(value){
		name = value;
	};
})();
這種模式下,私有變量和函數是由實例共享的,由於特權方法是在原型上定義的,因此所有實例都使用同一個函數,而特權方法,作爲一個閉包,總是保存着對包含作用域的引用。
getName和setName都有權訪問私有變量name,name就變成了一個靜態的由所有實例共享的屬性。
這種方式創建靜態私有變量會因爲使用原型而增加代碼複用,但每個實例都沒有自己的私有變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章