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 相关文章推荐
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
Dec 06 Javascript
JavaScript 学习笔记之语句
Jan 14 Javascript
javascript将异步校验表单改写为同步表单
Jan 27 Javascript
javascript数组排序汇总
Jul 07 Javascript
深入学习JavaScript中的原型prototype
Aug 13 Javascript
jquery插件pagination实现无刷新ajax分页
Sep 30 Javascript
Winform客户端向web地址传参接收参数的方法
May 17 Javascript
javascript三种代码注释方法
Jun 02 Javascript
聊一聊Vue.js过渡效果
Sep 07 Javascript
手动用webpack搭建第一个ReactApp的示例
Apr 11 Javascript
JavaScript交换变量的常用方法小结【4种方法】
May 07 Javascript
JS制作简易计算器的实例代码
Jul 04 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
PHP4引用文件语句的对比
2006/10/09 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
[55:18]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python条件和循环的使用方法
2013/11/01 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
python 实现按对象传值
2019/12/26 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
Python实现随机爬山算法
2021/01/29 Python
怎么样写好简历中的自我评价
2013/10/25 职场文书
高中军训感言500字
2014/02/24 职场文书
建筑工地标语
2014/06/18 职场文书
公司活动总结范文
2014/07/01 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技