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 相关文章推荐
自写简单JS判断是否已经弹出页面
Oct 20 Javascript
关于JavaScript中var声明变量作用域的推断
Dec 16 Javascript
jquery 删除字符串最后一个字符的方法解析
Feb 11 Javascript
javascript中typeof操作符和constucor属性检测
Feb 26 Javascript
bootstrap监听滚动实现头部跟随滚动
Nov 08 Javascript
js放到head中失效的原因与解决方法
Mar 07 Javascript
JS给按钮添加跳转功能类似a标签
May 30 Javascript
js实现加载页面就自动触发超链接的示例
Aug 31 Javascript
express express-session的使用小结
Dec 12 Javascript
layui使用数据表格实现购物车功能
Jul 26 Javascript
Angular8 Http拦截器简单使用教程
Aug 20 Javascript
jQuery实现回到顶部效果
Oct 19 jQuery
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的安全策略
2006/10/09 PHP
php GD绘制24小时柱状图
2008/06/28 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
JavaScript内核之基本概念
2011/10/21 Javascript
Jquery简单实现GridView行高亮的方法
2015/06/15 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
微信小程序合法域名配置方法
2019/05/06 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
vue实现简单图片上传
2020/06/30 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
举例讲解Python中的算数运算符的用法
2015/05/13 Python
Python标准库之collections包的使用教程
2017/04/27 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
军训鉴定表自我鉴定
2014/02/13 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
学生退学证明
2015/06/23 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
CPU不支持Windows11系统怎么办
2021/11/21 数码科技