1. 門戶大開型程序員
它的全部屬性和方法都是公開的,可訪問的,這些公用的屬性須要使用this關鍵字來建立。閉包
優勢:方便派生子類和進行單元測試,建立這樣的對象不須要深刻理解做用域或調用鏈的概念。單元測試
缺點:雖然咱們爲設置屬性提供了賦值哭器方法,但那些屬性仍然是公開的,能夠被直接設置,而在這種方案中卻沒法阻止這種行爲。無論是出於有間仍是無心,isbn均可能被設置爲一個無效值。測試
var Book=function(isbn, title, author){ this.setIsbn(isbn); this.setTitle(title); this.setAuthor(author); } Book.prototype={ checkIsbn: function(isbn){}, getIsbn: function(){return this.isbn;}, setIsbn: function(isbn){ if(!this.checkIsbn(isbn)) throw new Error('Book: Invalid ISBN'); this.isbn=isbn; } getTitle: function(){return this.title;} setTitle: function(title){this.title=title||'No title specified';} getAuthor: function(){return this.author;} setAuthor: function(author){this.author=author||'No author specified';} display: function(){} }
2. 命名約定型:如下劃線來表示方法或屬性的私有性this
下劃線的這種用法是一個衆所周知的命名規範,它代表一個屬性(或方法)僅供對象內部使用,直接訪問或設置它可能會致使意想不到的後果。這有助於防止程序員對它的無心使用,卻不能防止對它的有意使用。後一個目標的實現須要有真正私有性的方法。spa
3. 使用閉包來建立真正的私有成員prototype