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 相关文章推荐
网页里控制图片大小的相关代码
Jun 13 Javascript
js 页面关闭前的出现提示的实现代码
May 25 Javascript
JavaScript单元测试ABC
Apr 12 Javascript
js关于精确计算和数值格式化以及直接引js文件
Jan 28 Javascript
jQuery中prevAll()方法用法实例
Jan 08 Javascript
JS实现窗口加载时模拟鼠标移动的方法
Jun 03 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
Jul 31 Javascript
Vue.js组件tabs实现选项卡切换效果
Dec 01 Javascript
浅谈Angular的$q, defer, promise
Dec 20 Javascript
浅谈js中的变量名和函数名重名
Feb 13 Javascript
self.attachevent is not a function的解决方法
Apr 04 Javascript
基于JavaScript实现随机点名器
Feb 25 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中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
PHP 程序授权验证开发思路
2009/07/09 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
javascript innerHTML、outerHTML、innerText、outerText的区别
2008/11/24 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
2015/12/07 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
详解weex默认webpack.config.js改造
2018/01/08 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
python3访问sina首页中文的处理方法
2014/02/24 Python
Python help()函数用法详解
2014/03/11 Python
python多重继承实例
2014/10/11 Python
Win10+GPU版Pytorch1.1安装的安装步骤
2019/09/27 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
详解python polyscope库的安装和例程
2020/11/13 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
ktv中秋节活动方案
2014/01/30 职场文书
打架检讨书300字
2014/02/02 职场文书
大一新生学期自我评价
2014/04/09 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python