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的初始化与对象构建之浅析
Apr 12 Javascript
js css后面所带参数含义介绍
Aug 18 Javascript
js单词形式的运算符
May 06 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
Oct 29 Javascript
解决jQuery使用JSONP时产生的错误
Dec 02 Javascript
JS解决iframe之间通信和自适应高度的问题
Aug 24 Javascript
JavaScript引用类型RegExp基本用法详解
Aug 09 Javascript
vue 动态绑定背景图片的方法
Aug 10 Javascript
微信小程序之swiper滑动面板用法示例
Dec 04 Javascript
node app 打包工具pkg的具体使用
Jan 17 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
Mar 05 Javascript
Vue使用Ref跨层级获取组件的步骤
Jan 25 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
DSP接收机前端设想
2021/03/02 无线电
删除无限级目录与文件代码共享
2006/07/12 PHP
社区(php&&mysql)一
2006/10/09 PHP
php编写简单的文章发布程序
2015/06/18 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
stripos函数知识点实例分享
2019/02/11 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
javascript写的一个链表实现代码
2009/10/25 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
js实现拖拽效果
2015/02/12 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
[00:02]DOTA2新版本使用PA至宝后暴击展示
2014/11/19 DOTA
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
详解Python模块化编程与装饰器
2021/01/16 Python
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
如何定义一个可复用的服务
2014/09/30 面试题
体育专业个人的求职信范文
2013/09/21 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
2014年国培研修感言
2014/03/09 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
小石潭记导游词
2015/02/03 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
Java实现简易的分词器功能
2021/06/15 Java/Android
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB