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 中的 call 和 apply使用介绍
Feb 22 Javascript
js网页中的(运行代码)功能实现思路
Feb 04 Javascript
JS中Iframe之间传值的方法
Mar 11 Javascript
JS中setTimeout()的用法详解
Apr 14 Javascript
js判断浏览器类型的方法
Aug 07 Javascript
js获取内联样式的方法
Jan 27 Javascript
微信小程序 表单Form实例详解(附源码)
Dec 22 Javascript
Angular 4依赖注入学习教程之简介(一)
Jun 04 Javascript
hammer.js实现图片手势放大效果
Aug 29 Javascript
bootstrap时间插件daterangepicker使用详解
Oct 19 Javascript
node.js环境搭建图文详解
Sep 19 Javascript
JS无限级导航菜单实现方法
Jan 05 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
GD输出汉字的函数的分析
2006/10/09 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
django中的ajax组件教程详解
2018/10/18 PHP
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
python动态监控日志内容的示例
2014/02/16 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
Python爬虫代理IP池实现方法
2017/01/05 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
python excel和yaml文件的读取封装
2021/01/12 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
物理系毕业生自荐信
2013/11/01 职场文书
学生喝酒检讨书
2014/02/06 职场文书
安全教育感言
2014/03/04 职场文书
体育课课后反思
2014/04/24 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
详解JVM系列之内存模型
2021/06/10 Javascript