惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
J
Java Code Geeks
雷峰网
雷峰网
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
腾讯CDC
博客园 - 司徒正美
B
Blog RSS Feed
博客园 - 三生石上(FineUI控件)
I
InfoQ
N
Netflix TechBlog - Medium
L
LangChain Blog
博客园_首页
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Tailwind CSS Blog
MyScale Blog
MyScale Blog
美团技术团队
The Cloudflare Blog
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
H
Help Net Security
Martin Fowler
Martin Fowler
V
Visual Studio Blog

博客园 - 滋心

为hover事件加上延迟 面向对象的JavaScript(2)闭包 JQuery画细线表格 自定义控件验证页面所有文本框 - 滋心 - 博客园 LinQ in Action 笔记三:Hello LINQ to SQL LinQ in Action 笔记二:Hello LINQ to XML LinQ in Action 笔记一、Hello LINQ to Objects JQuery选择器插件 Extra selectors JQuery选择器 - 滋心 - 博客园 利用Repeater控件显示主-从关系数据表 查询表结构 Sqlserver建立和另外数据库的连接 XPath实例教程十九、ancestor-or-self 轴(axis)包含上下文节点本身和该节点的祖先节点 XPath实例教程十八、descendant-or-self 轴 XPath实例教程十七、preceding轴 XPath实例教程十六、following轴 XPath实例教程十五、preceding-sibling 轴 XPath实例教程十四、following-sibling轴 XPath实例教程十三、ancestor轴
面向对象的JavaScript(1):创建简单的类
滋心 · 2009-08-27 · via 博客园 - 滋心

我们以Book类为例,Book类有三个属性:书号、标题、作者

Code

这样一个简单的Book类就创建好了

我们可以这样实例化这个类

var book = new Book(111,"基本型","zixinhmc");
book.display();

上面的类有一个问题,我们在实例化时,并没有对ISBN 属性进行数据完整性验证,我们修改一下上面的那个类

var Book = function(isbn,title,author){
    
if(!this.checkIsbn(isbn)){
        
throw new Error("isbn错误");
    }
    
this.isbn = isbn;
    
this.title = title;
    
this.author = author;
}
Book.prototype 
= {
    checkIsbn:
function(isbn){
        
if(isbn == undefined || typeof isbn != "string"){
            
return false;
        }
        
if(isbn.length != 10){
            
return false;
        }
        
return true;
    }
    , display:
function(){
        alert(
"isbn:" + this.isbn + "\n" + "title:" + this.title + "\n" + "author:" + this.author);
    }
}

现在情况看起来有所改善了,我们在实例化对象时对ISBN属性进行有效性检查,如果不通过将抛出一个异常。
但是,现在又出现一个问题了
我们看

var book = new Book("1234567890","基本型","zixinhmc");
book.isbn 
= 1;
book.display();

我们现在可以在实例化了以后,给对象的isbn属性赋值,而这时的赋值将不会进行有效性验证,所以我们将再次修改这个类,给这三个属性添加get、set方法,让用户不能直接操作这个类的属性

var Book = function(isbn,title,author){
    
this.setIsbn(isbn);
    
this.setTitle(title);
    
this.setAuthor(author);
}
Book.prototype 
={
    checkIsbn: 
function(isbn){
        
if(isbn == undefined || typeof isbn != "string"){
            
return false;
        }
        
if(isbn.length != 10){
            
return false;
        }
        
return true;
    }
    , getIsbn: 
function(){
        
return this._isbn;
    }
    , setIsbn: 
function(isbn){
        
if(!this.checkIsbn(isbn)){
            
throw new error("isbn错误");
        }
        
this._isbn = isbn;
    }
    , getTitle: 
function(){
        
return this._title;
    }
    , setTitle: 
function(title){
        
this._title = title;
    }
    , getAuthor: 
function(){
        
return this._author;
    }
    , setAuthor: 
function(author){
        
this._author = author;
    }
    , display:
function(){
        alert(
"isbn:" + this.isbn + "\n" + "title:" + this.title + "\n" + "author:" + this.author);
    }
};

我们现在可以使用setIsbn()来给属性赋值了

var book = new Book("1234567890","门户打开型","zixinhmc");
book.setIsbn(
"0123456789");
book.display();

注意:其实,实例化后还是可以通过book._isbn来绕过检查给属性赋值的,不过,我们一般在团队内部约定以下划线(_)为前缀的属性或方法为私有,不要直接赋值或调用
我们将在下一次讲解如何创建真正拥有私有属性或方法的类

参考书目:
《JavaScript权威指南》
《JavaScritp高级程序设计》
《JavaScript设计模式》