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解析json数据并将json字符串转化为数组的实现方法
Dec 25 Javascript
js函数参数设置默认值的一种变通实现方法
May 26 Javascript
node.js中的dns.getServers方法使用说明
Dec 08 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
Dec 13 Javascript
Node.js中看JavaScript的引用
Apr 22 Javascript
微信小程序中hidden不生效原因的解决办法
Apr 26 Javascript
详解Angular路由 ng-route和ui-router的区别
May 22 Javascript
jQuery常见面试题之DOM操作详析
Jul 05 jQuery
vue webpack打包优化操作技巧
Feb 22 Javascript
js如何找出字符串中的最长回文串
Jun 04 Javascript
node.js使用stream模块实现自定义流示例
Feb 13 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
Apr 08 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
php5 and xml示例
2006/11/22 PHP
curl实现站外采集的方法和技巧
2014/01/31 PHP
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
php微信开发之图片回复功能
2018/06/14 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
jquery创建div 实现代码
2009/04/27 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
vue 子组件修改data或调用操作
2020/08/07 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
python构造函数init实例方法解析
2020/01/19 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
美德好少年事迹材料
2014/01/19 职场文书
班主任对学生的评语
2014/04/26 职场文书
计算机专业自荐信范文
2014/05/28 职场文书
2014年房产经纪人工作总结
2014/12/08 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python