javascript 写类方式之三


Posted in Javascript onJuly 05, 2009

取前面两种的优点:
a、用构造函数来定义类属性(字段)
b、用原型方式来定义类的方法。
就有了第三种方式。这种方式貌似采用的人较多。
3、综合构造函数/原型

/** 
* Person类:定义一个人,有个属性name,和一个getName方法 
* @param {String} name 
*/ 
function Person(name) { 
this.name = name; 
} 
Person.prototype.getName = function() { 
return this.name; 
}

这样,即可通过构造函数构造不同name的人,对象实例也都共享getName方法,不会造成内存浪费。
但似乎这样的代码风格似乎仍然没有java的类那么紧凑,把属性,构造方法(函数),方法都包在大括号内。
public class Person { 
//属性(字段) 
String name; 
//构造方法(函数) 
Person(String name) { 
this.name = name; 
} 
//方法 
String getName() { 
return this.name; 
} 
}

为了让js代码风格更紧凑,把挂在prototype的方法代码移到function Person的大括号内。
function Person(name) { 
this.name = name; 
Person.prototype.getName = function() { 
return this.name; 
} 
}

似乎很神奇,还能这么写啊!验证一下
var p1 = new Person("Jack"); 
var p2 = new Person("Tom"); 
console.log(p1.getName());//Jack 
console.log(p2.getName());//Tom

没有报错,控制台也正确输出了。说明可以这么写,呵呵。
嗯,似乎很完美。
a 、可以通过传参构造对象实例
b 、对象实例都共享同一份方法不造成内存浪费
c 、代码风格也比较紧凑
但每次new一个对象的时候都会执行
Person.prototype.getName = function() {
return this.name;
}
造成了不必要的重复的运算。因为getName方法挂在prototype上只需执行一次即可。只需稍微改造下:
function Person(name) { 
this.name = name; 
if(Person._init==undefined) { 
alert("我只执行一次!"); 
Person.prototype.getName = function() { 
return this.name; 
} 
Person._init = 1; 
} 
}

new两个对象,
var p1 = new Person("Andy");//第一次new会弹出'我只执行一次!' 
var p2 = new Person("Lily");//以后new的对象不会再执行了

Javascript 相关文章推荐
innerHTML,outerHTML,innerTEXT三者之间的区别
Jan 28 Javascript
javascript面向对象入门基础详细介绍
Sep 05 Javascript
利用webqq协议使用python登录qq发消息源码参考
Apr 08 Javascript
js实现瀑布流的一种简单方法实例分享
Nov 04 Javascript
使用jquery组件qrcode生成二维码及应用指南
Feb 22 Javascript
javascript实现C语言经典程序题
Nov 29 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
Dec 02 Javascript
Angular的MVC和作用域
Dec 26 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
Mar 15 Javascript
React Native 环境搭建的教程
Aug 19 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
Sep 14 Javascript
通过实例解析json与jsonp原理及使用方法
Sep 27 Javascript
javascript 写类方式之二
Jul 05 #Javascript
javascript 写类方式之一
Jul 05 #Javascript
Javascript 调试利器 Firebug使用详解六
Jul 05 #Javascript
jQuery DIV弹出效果实现代码
Jul 03 #Javascript
Javascript 遍历对象中的子对象
Jul 03 #Javascript
javascript web页面刷新的方法收集
Jul 02 #Javascript
javascript 操作文件 实现方法小结
Jul 02 #Javascript
You might like
无数据库的详细域名查询程序PHP版(2)
2006/10/09 PHP
文件系统基本操作类
2006/11/23 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
PHP7 弃用功能
2021/03/09 PHP
详细讲解JS节点知识
2010/01/31 Javascript
jquery 问答知识整理
2010/02/11 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
jquery中用函数来设置css样式
2016/12/22 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
Python pass 语句使用示例
2014/03/11 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
用Python shell简化开发
2018/08/08 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
Django在Model保存前记录日志实例
2020/05/14 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
历史专业毕业生的自我鉴定
2013/11/15 职场文书
五好党支部事迹材料
2014/02/06 职场文书
大学生个人实习的自我评价
2014/02/15 职场文书
股东合作协议书
2014/09/12 职场文书
委托书的写法
2014/09/16 职场文书
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
pandas数值排序的实现实例
2021/07/25 Python