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中add实现同时选择两个id对象
Oct 22 Javascript
JSON为什么那样红为什么要用json(另有洞天)
Dec 26 Javascript
jquery实现相册一下滑动两次的方法
Feb 09 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
Nov 29 Javascript
AngularJS实现全选反选功能
Dec 08 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
May 02 Javascript
详解利用jsx写vue组件的方法示例
Jul 17 Javascript
JS实现匀加速与匀减速运动的方法示例
Sep 04 Javascript
基于Vue过渡状态实例讲解
Sep 14 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 Javascript
通过cordova将vue项目打包为webapp的方法
Feb 02 Javascript
openlayers实现图标拖动获取坐标
Sep 25 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 项目的方法
2007/01/02 PHP
PHP比你想象的好得多
2014/11/27 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
win系统下nodejs环境安装配置
2017/05/04 NodeJs
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
通过js实现压缩图片上传功能
2020/02/25 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
Python base64编码解码实例
2015/06/21 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
python中with用法讲解
2020/02/07 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
培训自我鉴定
2014/01/31 职场文书
《陈毅探母》教学反思
2014/05/01 职场文书
2015教师年度考核评语
2015/03/25 职场文书
贷款工资证明范本
2015/06/12 职场文书
贷款担保书范本
2015/09/22 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
django 认证类配置实现
2021/11/11 Python