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 相关文章推荐
3Z版基于jquery的图片复选框(asp.net+jquery)
Apr 12 Javascript
使用jQuery.fn自定义jQuery翻页插件
Jan 20 Javascript
详解Angular开发中的登陆与身份验证
Jul 27 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
Sep 05 Javascript
jQuery简易时光轴实现方法示例
Mar 13 Javascript
简单实现jQuery轮播效果
Aug 18 jQuery
几个你不知道的技巧助你写出更优雅的vue.js代码
Jun 11 Javascript
监听element-ui table滚动事件的方法
Mar 26 Javascript
浅谈发布订阅模式与观察者模式
Apr 09 Javascript
简述ES6新增关键字let与var的区别
Aug 23 Javascript
js实现列表向上无限滚动
Jan 13 Javascript
vue2实现provide inject传递响应式
May 21 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
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
js去除重复字符串两种实现方法
2013/01/09 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
vue加载完成后的回调函数方法
2018/09/07 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
Python中的descriptor描述器简明使用指南
2016/06/02 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
Python机器学习之决策树算法
2017/12/22 Python
python如何使用unittest测试接口
2018/04/04 Python
Django对models里的objects的使用详解
2019/08/17 Python
Django nginx配置实现过程详解
2020/09/10 Python
python音频处理的示例详解
2020/12/23 Python
爷爷追悼会答谢词
2014/01/24 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
成人继续教育实施方案
2014/03/01 职场文书
企业晚会策划方案
2014/05/29 职场文书
地方白酒代理协议书
2014/10/25 职场文书
公积金贷款承诺书
2015/04/30 职场文书
社区活动总结范文
2015/05/07 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书
军事博物馆观后感
2015/06/05 职场文书
好员工观后感
2015/06/17 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
如何做好工作总结!
2019/04/10 职场文书
创业计划书之熟食店
2019/10/16 职场文书