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 相关文章推荐
Javascript 类与静态类的实现
Apr 01 Javascript
JavaScript中的变量声明早于赋值分析
Mar 01 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
May 16 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
May 06 Javascript
Jquery实现遮罩层的方法
Jun 08 Javascript
JavaScript操作HTML DOM节点的基础教程
Mar 11 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
Aug 02 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
Jan 23 Javascript
Vue from-validate 表单验证的示例代码
Sep 26 Javascript
利用Vue2.x开发实现JSON树的方法
Jan 04 Javascript
Vue 项目分环境打包的方法示例
Aug 03 Javascript
JS实现购物车基本功能
Nov 08 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中截取字符串支持utf-8
2007/01/18 PHP
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
修改发贴的编辑功能
2007/03/07 Javascript
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
Python部署web开发程序的几种方法
2017/05/05 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
Python命令行解析模块详解
2018/02/01 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
销售高级职员求职信
2013/10/29 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
个人查摆剖析材料
2014/10/04 职场文书
休假证明书
2015/06/24 职场文书