一种JavaScript 类的设计模式
尽管前面介绍了如何定义一个类,如何初始化一个类的实例,但既可以在function定义
的函数体中添加成员,又可以用prototype 定义类的成员,代码显的很混乱,和面向对象语
言类的实现之间有着很大的区别。那么,如何以一种清晰的方式来定义类呢?下面给出了一
种类的实现模式,并将它们对应到面向对象语言类的实现上。
类的构造函数用来初始化一个实例,是每个类必不可少的一部分。在传统意义的面向对
象中,类的构造函数的名称和类的名称一致,同时它们的定义方式和类成员的定义是类似而
又相互独立的。而在JavaScript中,由于对象的灵活的性质,在构造函数中也可以为类添加
成员,在增加灵活性的同时,也增加了代码的复杂度。为了提高代码的可读性和开发效率,
完全可以抛弃这种定义成员的方式,而使用prototype 对象来替代,这样function 的定义就
是类的构造函数,符合传统意义类的实现:类名和构造函数名是相同的。例如:
function class1(){
//构造函数
}
//成员定义
class1.prototype.someProperty=”sample”;
class1.prototype.someMethod=function(){
//方法实现代码
}
虽然上面的代码对于类的定义已经清晰了很多,每定义一个属性或方法,都需要使用一
次class1.prototype,不仅代码体积变大,而且易读性还不够。为了进一步改进,可以使用无
类型对象的构造方法来指定prototype对象,从而实现类的成员定义:
//定义一个类class1
function class1(){
//构造函数
}
//通过指定prototype对象来实现类的成员定义
class1.prototype={
someProperty:”sample”,
someMethod:function(){
//方法代码
},
…//其他属性和方法.
}
上面的代码用一种很清晰的方式定义了class1,构造函数直接用类名来实现,而成员使
用无类型对象来定义,以列表的方式实现了所有属性和方法,并且可以在定义的同时初始化
属性的值。这也更类似于传统意义面向对象语言中类的实现。只是构造函数和类的成员定义
被分为了两个部分,不妨将其看成JavaScript中定义类的一种固定模式,这样在使用时会更
加容易理解。
注意:在一个类的成员之间互相引用,必须通过this 指针来进行,例如在上面例子中的someMethod 方
法中,如果要使用属性someProperty,必须通过this.someProperty的形式,因为在JavaScript中每
个属性和方法都是独立的,它们通过this指针联系在一个对象上。

一种JavaScript 类的设计模式的更多相关文章

  1. 7 种 Javascript 常用设计模式学习笔记

    7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...

  2. JavaScript 中常见设计模式整理

    开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式.本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知. JavaScript 中常见设计模 ...

  3. Javascript常用的设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

  4. 【转】五种常见的 PHP 设计模式

    工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合.要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程.在更改一个代码片段时,就会发生问题,系统其他部分 —— 您曾认为完 ...

  5. 五种常见的 PHP 设计模式

    设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 “四人帮”).所 ...

  6. JavaScript 类式继承与原型继承

    交叉着写Java和Javascript都有2年多了,今天来总结下自己所了解的Javascript类与继承. Javascript本身没有类似Java的面向对象的类与继承术语,但其基于原型对象的思想却可 ...

  7. 第九章:Javascript类和模块

    (过年了,祝大家新年好!) 第6章详细介绍了javascript对象,每个javascript对象都是一个属性集合,相互之间没有任何联系.在javascript中也可以定义对象的类,让每个对象都共享某 ...

  8. 5种JavaScript和CSS交互的方法

      分享   分享   分享   分享   分享   随着浏览器不断的升级改进,CSS和JavaScript之间的界限越来越模糊.本来它们是负责着完全不同的功能,但最终,它们都属于网页前端技术,它们需 ...

  9. JavaScript “类”定义 继承 闭包 封装

    一.Javascript “类”: 类:在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法. Javascript是一 ...

随机推荐

  1. XML文件的读取、序列化和反序列化操作

    public class XmlHelper { //从xml中获取MsgType public static string XMLSelect(string XML) { XmlDocument x ...

  2. GridView 分页方法

    要实现GrdView分页的功能. 操作如下: 1.更改GrdView控件的AllowPaging属性为true. 2.更改GrdView控件的PageSize属性为 任意数值(默认为10) 3.更改G ...

  3. 用SSH指令批量修改文件夹 文件权限和拥有者

    在linux系统下或登录ssh可以批量修改文件权限 wwwroot目录下的所有目录的权限递归设置为755 cd wwwrootfind -type d -exec chmod 755 {} \;或者是 ...

  4. LinearLayout 控件

    LinearLayout 控件,垂直显示各控件一行一个显示,比较好控件. 用RelativeLayout多个控件会堆在一起 <LinearLayout xmlns:android="h ...

  5. insertAdjacentHTML

    /** * insertAdjacentHTML * 支持 insertAdjacentHTML()方法的浏览器有 IE.Firefox 8+.Safari.Opera 和 Chrome */ var ...

  6. MySQL 添加列,修改列,删除列

    创建后表的修改 alter table 语句用于创建后对表的修改, 基础用法如下: 添加列 基本形式: alter table 表名 add 列名 列数据类型 [after 插入位置]; 示例: 在表 ...

  7. Azure SQL 数据库弹性池现已面市

    我们高兴地宣布Azure SQL 数据库弹性池现已正式面市.弹性池自去年试运行以来,得到许多软件即服务(SaaS)供应商和企业开发人员的认可,他们利用弹性池管理持续增长的云数据库和应用程序,成果高效. ...

  8. GFF format

    后记: ************************************************************************ 在使用cufflinks和cuffmerge中 ...

  9. 转 SQL Server中关于的checkpoint使用说明

    在SQL Server中有一个非常重要的命令就是CheckPoint,它主要作用是把缓存中的数据写入mdf文件中. 其实在我们进行insert, update, delete时,数据并没有直接写入数据 ...

  10. js 下载文件 window.location.href

    window.location.href ="../../pages2/assessmentplan/exportPointAsessment.do?planId="+planId ...