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;
}