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 ui对话框实例代码
May 10 Javascript
js或jquery实现页面打印可局部打印
Mar 27 Javascript
php结合imgareaselect实现图片裁剪
Jul 05 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
Mar 05 Javascript
对jQuary选择器的全面总结
Jun 20 Javascript
使用JS模拟锚点跳转的实例
Feb 01 Javascript
使用validate.js实现表单数据提交前的验证方法
Sep 04 Javascript
vue实现同一个页面可以有多个router-view的方法
Sep 20 Javascript
JointJS流程图的绘制方法
Dec 03 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
Dec 12 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
Jun 18 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
Apr 14 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防盗链的常用方法小结
2010/07/02 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
关于redux-saga中take使用方法详解
2018/02/27 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
深入学习Python中的上下文管理器与else块
2017/08/27 Python
浅析python的Lambda表达式
2019/02/27 Python
Python中Unittest框架的具体使用
2019/08/27 Python
python绘制随机网络图形示例
2019/11/21 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
医学类导师推荐信范文
2013/11/19 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
2015新学期家长寄语
2015/02/26 职场文书
毕业实习单位意见
2015/06/04 职场文书
红色电影观后感
2015/06/18 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis