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 相关文章推荐
firefox事件处理之自动查找event的函数(用于onclick=foo())
Aug 05 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
Oct 18 Javascript
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
Aug 23 Javascript
JavaScript中的面向对象介绍
Jun 30 Javascript
js判断变量是否未定义的代码
Mar 28 Javascript
js 判断计算字符串长度/判断空的简单方法
Aug 05 Javascript
jquery实现焦点图片随机切换效果的方法
Mar 12 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
Jul 28 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
jQuery使用zTree插件实现可拖拽的树示例
Sep 23 jQuery
分析JS中this引发的bug
Dec 12 Javascript
Vue 表情包输入组件的实现代码
Jan 21 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常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
php自定义错误处理用法实例
2015/03/20 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
js不完美解决click和dblclick事件冲突问题
2012/07/16 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
Python简单读取json文件功能示例
2017/11/30 Python
python使用tkinter实现简单计算器
2018/01/30 Python
实用自动化运维Python脚本分享
2018/06/04 Python
python3学习之Splash的安装与实例教程
2018/07/09 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
Python中的延迟绑定原理详解
2019/10/11 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
2020/01/02 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
视图的作用
2014/12/19 面试题
J2EE模式面试题
2016/10/11 面试题
大二学生学年自我鉴定
2014/09/12 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
亲戚关系证明
2015/06/24 职场文书