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监听div内容的变化具体实现思路
Nov 04 Javascript
js showModalDialog参数的使用详解
Jan 07 Javascript
分析了一下JQuery中的extend方法实现原理
Feb 27 Javascript
jquery选择器简述
Aug 31 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
Sep 14 Javascript
jQuery进行组件开发完整实例
Dec 15 Javascript
微信小程序 简单教程实例详解
Jan 13 Javascript
JS实现颜色动态淡化效果
Mar 06 Javascript
vue.js实现插入数值与表达式的方法分析
Jul 06 Javascript
vue使用高德地图根据坐标定位点的实现代码
Aug 22 Javascript
JS图片懒加载的优点及实现原理
Jan 10 Javascript
vue 中的动态传参和query传参操作
Nov 09 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不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
基于PHP CURL获取邮箱地址的详解
2013/06/03 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
PHP文件与目录操作示例
2016/12/24 PHP
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
了解Javascript中函数作为对象的魅力
2019/06/19 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
Python常用模块介绍
2014/11/21 Python
Python pickle模块用法实例
2015/04/14 Python
python实现基本进制转换的方法
2015/07/11 Python
使用Python生成XML的方法实例
2017/03/21 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python如何实现反向迭代
2018/03/20 Python
python之super的使用小结
2018/08/13 Python
Django如何自定义分页
2018/09/25 Python
Python文件读写常见用法总结
2019/02/22 Python
django将数组传递给前台模板的方法
2019/08/06 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
Python hashlib模块实例使用详解
2019/12/24 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
2013/08/11 HTML / CSS
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
酒店总经理职务说明书
2014/02/26 职场文书
2015年六一儿童节演讲稿
2015/03/19 职场文书
消防宣传语大全
2015/07/13 职场文书
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers