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 相关文章推荐
js读取本地excel文档数据的代码
Nov 11 Javascript
jquery 插件开发 extjs中的extend用法小结
Jan 04 Javascript
浅析Node.js的Stream模块中的Readable对象
Jul 29 Javascript
AngularJS 入门教程之事件处理器详解
Aug 19 Javascript
原生js封装的一些jquery方法(详解)
Sep 20 Javascript
利用NPM淘宝的node.js镜像加速nvm
Mar 27 Javascript
微信小程序本地缓存数据增删改查实例详解
May 24 Javascript
webpack教程之webpack.config.js配置文件
Jul 05 Javascript
React Native 搭建开发环境的方法步骤
Oct 30 Javascript
vue实现模态框的通用写法推荐
Feb 26 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
Apr 27 Javascript
mac上配置Android环境变量的方法
Jul 08 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日历类分享
2014/11/18 PHP
PHP获取某个月最大天数(最后一天)的方法
2015/07/29 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
javascript回调函数详解
2018/02/06 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
Python读写Excel文件方法介绍
2014/11/22 Python
基于python实现名片管理系统
2018/11/30 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
python实现大文件分割与合并
2019/07/22 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
办公室文员工作职责
2014/01/31 职场文书
市场推广策划方案
2014/06/02 职场文书
担保书格式
2015/01/20 职场文书
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL
vue ref如何获取子组件属性值
2022/03/31 Vue.js
mysql的单列多值存储实例详解
2022/04/05 MySQL