面向对象的JavaScript(1):创建简单的类
2009-08-27 16:38
411 查看
我们以Book类为例,Book类有三个属性:书号、标题、作者
var Book = function(isbn,title,author){
if(isbn == undefined){
throw new Error("书必须有一个isbn号码")
}
this.isbn = isbn;
this.title = title;
this.author = author;
}
Book.prototype.display = function(){
alert("isbn:" + this.isbn + "\n" + "title:" + this.title + "\n" + "author:" + this.author);
}这样一个简单的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设计模式》
var Book = function(isbn,title,author){
if(isbn == undefined){
throw new Error("书必须有一个isbn号码")
}
this.isbn = isbn;
this.title = title;
this.author = author;
}
Book.prototype.display = function(){
alert("isbn:" + this.isbn + "\n" + "title:" + this.title + "\n" + "author:" + this.author);
}这样一个简单的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设计模式》
相关文章推荐
- 关于javascript面向对象的编程和构造器的简单创建
- javascript使用面向对象的技术创建高级 Web 应用程序
- 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(一)
- 详解JavaScript基于面向对象之创建对象(2)
- 原生态 JavaScript 动态创建任意行数和列数的表格简单脚本 (简单Table ,object)
- 从面试题学习Javascript 面向对象(创建对象)
- Javascript面向对象三大特性(封装性、继承性、多态性)详解及创建对象的各种方法
- JavaScript高级 面向对象(5)--最简单的继承方式,混入mix
- javascript面向对象(一)-创建对象
- JavaScript高级程序设计【面向对象-创建对象2】
- javascript 简单对象创建
- JavaScript高级程序设计之面向对象的程序设计之创建对象之 构造函数模式第6.2.2讲笔记
- JavaScript高级程序设计之面向对象的程序设计之创建对象之组合使用构造函数模式和原型模式 第6.2.4讲笔记
- javascript面向对象与命名空间-简单示例
- \t\t深入了解javascript的面向对象特性 类和对象的创建 实例化
- javascript面向对象系列第二篇——创建对象的5种模式
- javascript开发:javascript面向对象、创建对象总结
- 使用Javascript和prototype.js框架创建类型及其相关的prototype属性的简单介绍
- Flot tutorial: Javascript 脚本创建简单图形报表示例
- 简单得创建JAVASCRIPTE WEB丰富界面以及与JAVA服务互相访问