一种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. phpstom 实用laravel 需要附加的 命令

    首先利用composer 下载相关的插件 在根目录执行此代码 composer require barryvdh/laravel-ide-helper 再者在config/app.php 添加一条命令 ...

  2. 【LeetCode OJ】Palindrome Partitioning II

    Problem Link: http://oj.leetcode.com/problems/palindrome-partitioning-ii/ We solve this problem by u ...

  3. Android系统在新进程中启动自定义服务过程(startService)的原理分析

    在编写Android应用程序时,我们一般将一些计算型的逻辑放在一个独立的进程来处理,这样主进程仍然可以流畅地响应界面事件,提高用户体验.Android系统为我们提供了一个Service类,我们可以实现 ...

  4. XMLParser解析xml--内容源自网络(在静态库中不能用GDATA来解析,因为静态库不能加动态库)

    </Books> 从其文档结构我们可以看出,要定义一个Book实体类描述具体的书籍信息,其中用于存储的相关xml文档元素的实例变量与对应元素同名(本例:title.author.summa ...

  5. 走过路过不要错过~教你用java抓取网页中你想要的东东~~

    学习了正则之后,打算用java玩一玩,所以就决定用它来实现一个好玩的idea import java.io.BufferedReader; import java.io.IOException; im ...

  6. 16、SQL基础整理(触发器.方便备份)

    触发器(方便备份) 本质上还是一个存储过程,只不过不是通过exec来调用执行,而是通过增删改数据库的操作来执行(可以操作视图) 全部禁用触发器 alter table teacher disable ...

  7. 关于HttpWebRequest.KeepAlive

    于HTTP服务器每个客户端2个连接的限制这两天猫在家里搞一个多线程的断点续传得C#程序,发现同时只能开2个线程下载,其他的线程一律要等待,这样就导致下载大文件时其他线程经常超时,郁闷好久.今天回公司无 ...

  8. UNION语句查询(转载)

    联合查询   在对数据信息进行操作时,有时需要将不同数据表中的数据信息组合在一起,这时需要使用联合查询.联合查询指的是将多表中的行数据组合在一个数据集中进行显示.本节将讲解有关联合查询方面的相关知识. ...

  9. Notepad++ 编译 pascal

    一.设置——>首选项 添加pas 二.运行,在输入框中填入命令: cmd /k cd /d "$(CURRENT_DIRECTORY)" &fpc -g $(FILE ...

  10. magento插件手动下载

    http://freegento.com/ddl-magento-extension.php 这是插件下载网址,但是要去magento官网获得下载秘钥,输入秘钥即可以下载.