javascript 写类方式之一


Posted in Javascript onJuly 05, 2009

EMCA262规范中没有类(class)的概念,js的new只是让他看起来更像c++,java一点。这里说的写类,只是书写js代码风格而已。
1、构造函数方式

/** 
* Person类:定义一个人,有个属性name,和一个getName方法 
* @param {String} name 
*/ 
function Person(name) { 
this.name = name; 
this.getName = function() { 
return this.name; 
} 
}

这种风格让我们这些写过java的有点亲切在于构造一个对象需要配置一些参数,参数要赋值给类里面this。但与java的区别是js用function来定义类,参数也无需定义类型。

类写好了,我们造几个对象:

var p1 = new Person("Jack"); 
var p2 = new Person("Tom"); 
console.log(p1 instanceof Person);//true 
console.log(p2 instanceof Person);//true

控制台输出也证明了p1,p2的确是类Person的对象实例。

这种方式的优点是:可以根据参数来构造不同的对象实例 ,缺点是构造时每个实例对象都会生成getName方法版本,造成了内存的浪费 。

当然经验丰富的程序员用一个外部函数来代替类方法,达到了每个对象共享同一个方法。改写后的类如下:

//外部函数 
function getName() { 
return this.name; 
} function Person(name) { 
this.name = name; 
this.getName = getName;//注意这里 
}

呵呵,有人可能觉得代码风格有点差强人意,怎么看也没有java那么紧凑。但的确可以减少内存的消耗。
Javascript 相关文章推荐
js 获取中文拼音,Select自动匹配字母获取值的代码
Sep 23 Javascript
JavaScript 设计模式 安全沙箱模式
Sep 24 Javascript
JavaScript从数组中删除指定值元素的方法
Mar 18 Javascript
JavaScript中的parse()方法使用简介
Jun 12 Javascript
js创建jsonArray传输至后台及后台全面解析
Apr 11 Javascript
js实现自定义路由
Feb 04 Javascript
Angular.js跨controller实现参数传递的两种方法
Feb 20 Javascript
Swiper实现轮播图效果
Jul 03 Javascript
vue 之 .sync 修饰符示例详解
Apr 21 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
Aug 23 Javascript
一文了解Vue中的nextTick
May 06 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
Sep 24 Javascript
Javascript 调试利器 Firebug使用详解六
Jul 05 #Javascript
jQuery DIV弹出效果实现代码
Jul 03 #Javascript
Javascript 遍历对象中的子对象
Jul 03 #Javascript
javascript web页面刷新的方法收集
Jul 02 #Javascript
javascript 操作文件 实现方法小结
Jul 02 #Javascript
javascript new 需不需要继续使用
Jul 02 #Javascript
ExtJS GTGrid 简单用户管理
Jul 01 #Javascript
You might like
深入php socket的讲解与实例分析
2013/06/13 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
微信支付扫码支付php版
2016/07/22 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
php桥接模式应用案例分析
2019/10/23 PHP
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
VUE axios发送跨域请求需要注意的问题
2017/07/06 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
js实现左右轮播图
2020/01/09 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
Python实现的字典值比较功能示例
2018/01/08 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
教师辞职报告范文
2014/01/20 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
合同审查法律意见书
2015/06/04 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
详解运行Python的神器Jupyter Notebook
2021/06/03 Python