1. 程式人生 > >----如何在js中實現公有和私有屬性

----如何在js中實現公有和私有屬性

私有方法其實和閉包是有關係的,私有方法在其他語言裡面是不被訪問到的,除非有專門的介面,js的區域性作用域裡面的東西在正常情況下也是不能被外部訪問到,但是通過閉包的方式可以訪問到,這樣我們就可以利用這個特性,看例子:

var book = (function(){
	var page = 100;
	return function(){
	this.auther = 'dava';
	this.price = 200;
	this._page = function(){
	alert(page);
      }
   }
})();
 
var a = new book();
a.auther//"dava"
a.price//  200
a.page//"wrong"
a._page()//  100

這裡例子用了一個函式自動執行,一上來就執行了一個匿名函式,並且在匿名函式裡面定義了一個區域性變數page,然後又返回了一個匿名函式,並且被全域性作用域下的book變數接收,此時使用new 呼叫book就會生成一個新物件a。其中auther屬性和price屬性可以直接通過物件訪問,因為這些屬性都是new的時候直接定義在返回的物件身上的,而page屬性則沒有,因此不能反回,但此時如果我想訪問page屬性,那就得依靠閉包了,返回的函式在外層的匿名函式裡面,因此在返回的函式身上定義了一個方法叫_page,這個方法彈出了page屬性,按照js作用域的關係,當前作用域找不到page,就會到上層作用域去尋找,這樣就找到了。通過這種方式我們就把私有方法和公有方法區分開了。