一种JavaScript 类的设计模式
一种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 类的设计模式的更多相关文章
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
- JavaScript 中常见设计模式整理
开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式.本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知. JavaScript 中常见设计模 ...
- Javascript常用的设计模式详解
Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...
- 【转】五种常见的 PHP 设计模式
工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合.要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程.在更改一个代码片段时,就会发生问题,系统其他部分 —— 您曾认为完 ...
- 五种常见的 PHP 设计模式
设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 “四人帮”).所 ...
- JavaScript 类式继承与原型继承
交叉着写Java和Javascript都有2年多了,今天来总结下自己所了解的Javascript类与继承. Javascript本身没有类似Java的面向对象的类与继承术语,但其基于原型对象的思想却可 ...
- 第九章:Javascript类和模块
(过年了,祝大家新年好!) 第6章详细介绍了javascript对象,每个javascript对象都是一个属性集合,相互之间没有任何联系.在javascript中也可以定义对象的类,让每个对象都共享某 ...
- 5种JavaScript和CSS交互的方法
分享 分享 分享 分享 分享 随着浏览器不断的升级改进,CSS和JavaScript之间的界限越来越模糊.本来它们是负责着完全不同的功能,但最终,它们都属于网页前端技术,它们需 ...
- JavaScript “类”定义 继承 闭包 封装
一.Javascript “类”: 类:在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法. Javascript是一 ...
随机推荐
- BZOJ 2054 疯狂的馒头
并查集把染过色的并在一起.倒着染色. #include<iostream> #include<cstdio> #include<cstring> #include& ...
- 渐进记法(O,Ω,Θ)
第一次在<算法导论>中看到这三种渐进记法的符号,当时对此一窍不通,所以也就没有注意它们,直接把他们忽略了,知道学习算法的时候,才知道当初的做法有多傻,因为一个算法的好坏以及复杂度,可以用它 ...
- iOS9的适配
1.大部分社交平台接口不支持https协议. 问题描述:在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据.对ShareSDK来说,具体表现可能是,无法授权.分享 ...
- IO复用(Reactor模式和Preactor模式)——用epoll来提高服务器并发能力
上篇线程/进程并发服务器中提到,提高服务器性能在IO层需要关注两个地方,一个是文件描述符处理,一个是线程调度. IO复用是什么?IO即Input/Output,在网络编程中,文件描述符就是一种IO操作 ...
- python报错
报错1 UnboundLocalError: local variable 'x' referenced before assignment 定义了一个全局参数,但是在函数中直接改变参数值,就会报这个 ...
- Think Python - Chapter 03 - Functions
3.1 Function callsIn the context of programming, a function is a named sequence of statements that p ...
- Eclipse Pydev 技巧汇编
之前一直使用eclipse中默认的console.但是这个console并不是interactive的,如果数据比较小的时候还行,数据量一旦很大,则每次调试都需要重新再跑一遍程序,从而浪费很多时间. ...
- UI学习笔记---第十一天UITableView表视图高级-自定义cell
自定义cell,多类型cell混合使用,cell自适应高度 自定义cell就是创建一个UITableViewCell的子类 把cell上的空间创建都封装在子类中,简化viewController中的代 ...
- coreseek(sphinx)安装1(xml数据源配置和测试)
1.下载coreseek-3.2.14-32版本.网址:http://www.coreseek.cn/products-install/install_on_windows/ (有详细的安装说明) ...
- 【渗透测试学习平台】 web for pentester -1.介绍与安装
web for pentester是国外安全研究者开发的的一款渗透测试平台,通过该平台你可以了解到常见的Web漏洞检测技术. 官网:https://www.pentesterlab.com 下载地址: ...