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 相关文章推荐
显示、隐藏密码
Jul 01 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
Dec 03 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
Mar 18 Javascript
javascript实现checkbox全选的代码
Apr 30 Javascript
jQuery中extend()和fn.extend()方法详解
Jun 03 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
Nov 25 Javascript
html+js+highcharts绘制圆饼图表的简单实例
Aug 04 Javascript
JavaScript实现简单的日历效果
Sep 25 Javascript
微信小程序  modal弹框组件详解
Oct 27 Javascript
js获取当前周、上一周、下一周日期
Mar 19 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
Nov 10 Javascript
微信小程序仿美团城市选择
Jun 06 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学习笔记 类的声明与对象实例化
2011/06/13 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
JS实现的简单分页功能示例
2018/08/23 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
python事件驱动event实现详解
2018/11/21 Python
Python os模块常用方法和属性总结
2020/02/20 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
大学毕业生自我鉴定
2013/11/05 职场文书
爱岗敬业演讲稿范文
2014/01/14 职场文书
二年级语文教学反思
2014/02/02 职场文书
小学社会实践活动总结
2014/07/03 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
六年级学生期末评语
2014/12/26 职场文书
驳回起诉裁定书
2015/05/19 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书