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 相关文章推荐
jQuery 学习6 操纵元素显示效果的函数
Feb 07 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
Jan 09 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
Feb 05 Javascript
js动态创建表格,删除行列的小例子
Jul 20 Javascript
JS实现DIV容器赋值的方法
Dec 14 Javascript
莱鸟介绍window.print()方法
Jan 06 Javascript
jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
Jan 26 Javascript
微信小程序 Audio API详解及实例代码
Sep 30 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
Dec 02 Javascript
vue.js实现刷新当前页面的方法教程
Jul 05 Javascript
react+redux仿微信聊天界面
Jun 21 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
Jan 18 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个人网站架设连环讲(一)
2006/10/09 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
php简单实现MVC
2015/02/05 PHP
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
Node.js读取文件内容示例
2017/03/07 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
python 文件和路径操作函数小结
2009/11/23 Python
Python编写屏幕截图程序方法
2015/02/18 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
Yahoo-PHP面试题3
2012/01/14 面试题
领导接待方案
2014/03/13 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
现场活动策划方案
2014/08/22 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
代理词怎么写
2015/05/25 职场文书
收入证明怎么写
2015/06/12 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技