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 相关文章推荐
jQuery select表单提交省市区城市三级联动核心代码
Jun 09 Javascript
基于javascript的COOkie的操作实现只能点一次
Dec 26 Javascript
BootStrap中的table实现数据填充与分页应用小结
May 26 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
Jul 14 Javascript
js仿支付宝多方框输入支付密码效果
Sep 27 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
Jan 11 Javascript
js实现拖拽功能
Mar 01 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
Jul 31 Javascript
vue改变对象或数组时的刷新机制的方法总结
Apr 24 Javascript
layui实现三级导航菜单
Jul 26 Javascript
原生js实现日历效果
Mar 02 Javascript
react-intl实现React国际化多语言的方法
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 str_pad 函数使用详解
2009/01/13 PHP
PHP 时间日期操作实战
2011/08/26 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
JSON辅助格式化处理方法
2013/03/26 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
layui 给数据表格加序号的方法
2018/08/20 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
jquery html添加元素/删除元素操作实例详解
2020/05/20 jQuery
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
为什么入门大数据选择Python而不是Java?
2018/03/07 Python
Django REST framework视图的用法
2019/01/16 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
上班睡觉检讨书
2014/01/09 职场文书
幼儿园门卫制度
2014/01/29 职场文书
力学专业求职信
2014/07/23 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
副总经理岗位职责
2015/02/02 职场文书
品质保证书格式
2015/02/28 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
遗失证明范文
2015/06/19 职场文书
重温入党誓词主持词
2015/06/29 职场文书
小学生运动会广播
2015/08/19 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python