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

Code
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设计模式》

转载于:https://www.cnblogs.com/zixin/archive/2009/08/27/1555151.html

面向对象的JavaScript(1):创建简单的类相关推荐

  1. JavaSE基础知识(五)--面向对象代码实现初步(实现一个简单的类类型代码)

    Java SE 是什么,包括哪些内容(五)? 本文内容参考自Java8标准 一.面向对象(代码实现): 首先,在这里我需要说明一个根本性的问题:实际上,面向对象编程包括了两部分,一个是你的编程思想,一 ...

  2. mootools 获取类名_使用MooTools创建简单的幻灯片,第III部分:创建类

    mootools 获取类名 In my previous two slideshow posts, Create a Simple Slideshow Using MooTools and Creat ...

  3. Java6面向对象编程创建一个矩形类, 求周长 面积

    package job; /** */ import java.util.Scanner; public class Space { /* 面向对象编程创建一个矩形类, 求周长 面积 */ publi ...

  4. 创建简单的银行账户类,包括开户人、账号、和存款余额3个属性,以及查询余额、存款、取款等方法。创建两个账户验证类的设计。

    创建简单的银行账户类,包括开户人.账号.和存款余额3个属性,以及查询余额.存款.取款等方法.创建两个账户验证类的设计. 完整代码如下: package pk1; import java.util.Sc ...

  5. 怎样简单的创建一个vector类?(干货 ! ! !详细 ! ! ! ! !)

    Vector接口介绍1 Member functions(创建) 1.建立空vector 2.建立内置类型vector 3.建立自定义类型vector 4.数组方式建立(赋值) 5.迭代器方式建立 M ...

  6. (转)面向对象的 JavaScript 编程:dojo.declare 详解

    >>>>>http://www.ibm.com/developerworks/cn/<<<<< JavaScript 早在发明初期时,仅用来 ...

  7. 面向对象的JavaScript编程

    面向对象的JavaScript编程     Javascript对于做过Web程序的人不应该是陌生,初期是用来做一些简单的FORM验证,基本上是在玩弄一些技巧性的东西.IE 4.0引入了DHTML,同 ...

  8. 面向对象的JavaScript基本知识指南大全

    由于jQuery和MooTools等精心开发的库,JavaScript已成为前端开发的基础.不过,我们要留意这些优秀库中所运用的较高级概念,这点极其重要.原因何在?因为作为Web开发人员,对待学习最新 ...

  9. (自己收藏)全面理解面向对象的 JavaScript

    全面理解面向对象的 JavaScript 前天 by 资深编辑 WnouM 评论(3) 有2727人浏览 收藏 javascript 面向对象 对象 类 原型 < >猎头职位: 上海:Ju ...

  10. 面向对象的 JavaScript:封装、继承与多态

    本文作者:家园工作室研发组成员 @维尔希宁 本文出处: 面向对象的 JavaScript:封装.继承与多态​blog.lenconda.top 本文遵循署名-非商业性使用-禁止演绎3.0 未本地化版本 ...

最新文章

  1. Ubuntu 9.04安设教程(傻瓜版)
  2. python 无法引用 tensorflow.keras_win10+anaconda安装tensorflow和keras遇到的坑小结
  3. workman php 安装,workerman安装及遇到的问题解决
  4. 使用Java的RESTful Web服务
  5. 修改DNS的Linux脚本,Shell脚本-配置网络
  6. JFreeChart学习示例
  7. CentOS6.x安装zabbix
  8. SPSS可信度数据分析
  9. oracle学习篇十二:索引
  10. 服务器usb驱动安装系统安装失败怎么办,usb驱动安装不成功,小编教你usb驱动安装失败的解决方法...
  11. 【华人学者风采】聂飞平 西北工业大学
  12. 大数据实操篇 No.17-Flink State介绍和使用(Datastream API)
  13. JAVA的学习(在IDEA环境下)
  14. c语言less函数,LESS使用方法
  15. 白告王旋的前端开发笔记——性能优化
  16. excel行列突出显示_在Excel中突出显示即将到来的日期
  17. 目前最流畅的android手机,目前最流畅的四款安卓手机,能做到1000天不卡顿!
  18. Diffusion Model原理详解及源码解析
  19. 补第十五周leetcode算法博客
  20. 中小型机器人开发平台apollo的场景应用

热门文章

  1. Xcode app修改项目名
  2. 菜鸟认知--DIP,Ioc,DI,Ioc容器
  3. UIAutomator2.0初始
  4. 入门命令14-文件替换:replace
  5. Hadoop学习入门(二)——部署关键问题1:OpenSSH 密钥管理(1)
  6. 用R演示逻辑回归过程-值得收藏
  7. 分布式存储ceph——(3)ceph常用命令
  8. mac --snip 滚动截屏
  9. JDK,JRE,JVM区别与联系(ZZ)
  10. 字符串匹配-kmp算法