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创建div 实现代码
Apr 27 Javascript
js 未结束的字符串常量错误解决方法
Jun 13 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
Apr 17 Javascript
javascript截取字符串小结
Apr 28 Javascript
JS实现在状态栏显示打字效果完整实例
Nov 02 Javascript
一步步教大家编写酷炫的导航栏js+css实现
Mar 14 Javascript
基于Vue实现timepicker
Apr 25 Javascript
JQuery判断radio单选框是否选中并获取值的方法
Jan 17 jQuery
node实现socket链接与GPRS进行通信的方法
May 20 Javascript
webpack4之如何编写loader的方法步骤
Jun 06 Javascript
Async/Await替代Promise的6个理由
Jun 15 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
Sep 04 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
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
深入学习微信网址链接解封的防封原理visit_type
2019/08/15 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
js更优雅的兼容
2010/08/12 Javascript
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
JQuery中节点遍历方法实例
2015/05/18 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
提高python代码运行效率的一些建议
2020/09/29 Python
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
Order by的几种用法
2013/06/16 面试题
人力资源部培训专员岗位职责
2014/01/02 职场文书
项目负责人任命书
2014/06/04 职场文书
法学专业求职信
2014/07/15 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
MySQL创建高性能索引的全步骤
2021/05/02 MySQL
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记
Python 匹配文本并在其上一行追加文本
2022/05/11 Python
Nginx利用Logrotate实现日志分割
2022/05/20 Servers
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang
教你nginx跳转配置的四种方式
2022/07/07 Servers