一种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. HDU5437 Alisha’s Party 优先队列

    点击打开链接 可能出现的问题: 1.当门外人数不足p人时没有判断队列非空,导致RE. 2.在m次开门之后最后进来到一批人没有入队. 3.给定的开门时间可能是打乱的,需要进行排序. #include&l ...

  2. hdu 3635

    http://acm.hdu.edu.cn/showproblem.php?pid=3635 1-n个城市,对应放着编号1-n的龙珠. 两种操作 T A B 把编号A的龙珠所在城市内的全部龙珠放到有编 ...

  3. Visual Studio Usage

    Navigation Double click on UI element goes to its _click event. F12 – for method or variable, go to ...

  4. PAT (Basic Level) Practise:1005. 继续(3n+1)猜想

    [题目链接] 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对n=3进 ...

  5. 五 Servlet 技术

    一 Servlet 基础 1. 定义相关: a) 是运行在 Web 服务器上得 Java 小程序 b) 只将处理结果返回给客户 c) 是实现接口 Servlet 的 java 类,能被服务器调用. d ...

  6. Java--常用类

    1.方法中参数传递:值传递 基本数类型:具体的实际值 引用数据类型:对象的地址值 2.继承:关键字:extends单继承继承父类的非私有成员多重继承 2.权限的修饰符:private 只能在当前类的内 ...

  7. ZOJ 1088 System Overload

    原题链接 题目大意:浙大的破网络容量有限,太多人同时使用BBS就会系统崩溃.为了保持系统正常工作,过载时就需要切断部分用户.规则是把玉泉所有的建筑从1到n编号,设定一个常数m.从1开始数,第m幢建筑的 ...

  8. 解决Android时时更新listview数组越界问题

    时时更新数据一般出现在金融.股票行业对数据的准确性要求极高情况下使用. 先来看看下面一段代码, public class MainActivity extends Activity { private ...

  9. 将String类型的XML解析并设置到实体类中

    package com.mooc.string; import java.util.ArrayList; import java.util.List; import org.dom4j.Documen ...

  10. Blob 构造函数

    Blob 构造函数使 Web 开发人员可直接在客户端上创建或操作 Blob(经常等效于一个文件). 该构造函数在 W3C 的文件 API 规范中进行定义,该规范目前尚处于工作草案阶段.在较早版本的文件 ...