javascript設計模式 封裝和信息隱藏(上)
2024-05-06 14:21:31
供稿:網友
本文分上下兩部分,上部講基本模式(basic patterns):完全暴露法,下劃線標記法和使用閉包;下部講高級模式(Advanced Patterns),如何實現靜態方法和屬性,常量還有其他一些知識點。
封裝是面向對象語言很基本也是很有用的特性,雖然javascript也可以稱的上是面向對象語言,但他對封裝的支持并不是很好,不像其他語言,只要使用private、protected就可以實現。但這并不是說就沒有辦法了,下面我就介紹下如何在javascript中實現封裝。
一、基本模式(basic patterns),主要包括三種方式:完全暴露法,下劃線標記法和使用閉包。(閉包是個很重要,也是很難的概念,有興趣的朋友可以去網上找資料,我博客里也轉載了別人的文章)。
這里我們以book類作為例子,需要創建和初始化book類。
代碼如下:
// Book(isbn, title, author)
var theHobbit = new Book('0-395-07122-4', 'The Hobbit', 'J. R. R. Tolkien');
theHobbit.display(); // Outputs the data by creating and populating an HTML element.
1.完全暴露法:
創建book類可以用最傳統的構造函數方式,
代碼如下:
var Book = function(isbn, title, author) {
if(!this.checkIsbn(isbn)) throw new Error('Book: Invalid ISBN.');
this.isbn = isbn;
//代碼中 || 的作用是 如果title無值,則會把'No title specified'賦給 this.title。這種方式很好用,大家可以在自己的代碼中使用。
this.title = title || 'No title specified';
this.author = author || 'No author specified';
}
Book.prototype = {
//驗證isbn函數
checkIsbn: function(isbn) {
...
},
//獲取isbn
getIsbn: function() {
return this.isbn;
},
//設置isbn
setIsbn: function(isbn) {
if(!this.checkIsbn(isbn)) throw new Error('Book: Invalid ISBN.');
this.isbn = isbn;
},
//獲取title
getTitle: function() {
return this.title;
},
//設置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() {
...
}
};
代碼有點多,我在這里簡單講解下。javascript中創建類和c#,java有點不同,c#,java會把所有方法和屬性包在一個類文件里面,比如說
代碼如下:
public class book()
{
private string isbn;
public string ISBN
{
set
{
this.isbn=value;
}