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学习历程和心得小结
Aug 16 Javascript
jquery zTree异步加载简单实例分享
Feb 05 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
Mar 03 Javascript
javascript作用域问题实例分析
Jul 13 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
Dec 12 Javascript
使用AngularJS2中的指令实现按钮的切换效果
Mar 27 Javascript
vue-cli脚手架引入图片的几种方法总结
Mar 13 Javascript
node puppeteer(headless chrome)实现网站登录
May 09 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
Jun 05 Javascript
axios的拦截请求与响应方法
Aug 11 Javascript
node错误处理与日志记录的实现
Dec 24 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
May 21 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函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
CI框架中$this->load->library()用法分析
2016/05/18 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
零基础php编程好学吗
2019/10/11 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
js快速排序的实现代码
2013/12/08 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
javascript数据类型详解
2017/02/07 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
python连接mysql并提交mysql事务示例
2014/03/05 Python
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
Python中的__SLOTS__属性使用示例
2015/02/18 Python
Python3处理文件中每个词的方法
2015/05/22 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
婚纱摄影师求职信范文
2014/04/17 职场文书
软件售后服务承诺书
2014/05/21 职场文书
社会实践活动报告
2015/02/05 职场文书
伏羲庙导游词
2015/02/09 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
Pandas搭配lambda组合使用详解
2022/01/22 Python