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 相关文章推荐
JQery 渐变图片导航效果代码 漂亮
Jan 01 Javascript
这段js代码得节约你多少时间
Dec 20 Javascript
javascript实现密码强度显示
Mar 18 Javascript
JS实现字符串转驼峰格式的方法
Dec 16 Javascript
js设置文字颜色的方法示例
Dec 30 Javascript
React学习之事件绑定的几种方法对比
Sep 24 Javascript
实例讲解JavaScript预编译流程
Jan 24 Javascript
js常见遍历操作小结
Jun 06 Javascript
layui表格数据重载
Jul 27 Javascript
vue-列表下详情的展开与折叠案例
Jul 28 Javascript
详解JavaScript自定义函数
Jul 29 Javascript
Vue2项目中对百度地图的封装使用详解
Jun 16 Vue.js
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
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
进一步探究Python的装饰器的运用
2015/05/05 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
python统计中文字符数量的两种方法
2019/01/31 Python
pip安装python库的方法总结
2019/08/02 Python
python多线程扫描端口(线程池)
2019/09/04 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
党员公开承诺书
2014/03/25 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
2015年高中语文教学总结
2015/08/18 职场文书