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 相关文章推荐
javawscript 三级菜单的实现原理
Jul 01 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
Sep 03 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
Dec 18 Javascript
JavaScript中的迭代器和生成器详解
Oct 29 Javascript
基于JavaScript实现轮播图代码
Jul 14 Javascript
jQuery实现大图轮播
Feb 13 Javascript
JavaScript面向对象继承原理与实现方法分析
Aug 09 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
Aug 26 Javascript
vue日历/日程提醒/html5本地缓存功能
Sep 02 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
Mar 06 Javascript
js实现点赞按钮功能的实例代码
Mar 06 Javascript
js实现简单选项卡制作
Aug 05 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针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
Python模块学习 re 正则表达式
2011/05/19 Python
python threading模块操作多线程介绍
2015/04/08 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
如何用python整理附件
2018/05/13 Python
浅谈Django的缓存机制
2018/08/23 Python
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
初中同学聚会感言
2014/02/11 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
导游词之江南周庄
2019/12/06 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python
nginx.conf配置文件结构小结
2022/04/08 Servers