JavaScript 实现类的多种方法实例


Posted in Javascript onMay 01, 2013

构造方法

function coder()
{
    this.name = '现代魔法';
    this.job = 'Web 开发者';
    this.coding = function ()
    { alert('我正在写代码'); }
}
var coder = new coder();
alert(coder.name);
coder.coding();

工厂方法
function createCoderFactory()
{
    var obj = new Object();
    obj.name = '现代魔法';
    obj.job = '程序员';
    obj.coding = function ()
    {
        alert('我正在写代码');
    };
    return obj;
}
var coder = createCoderFactory();
alert(coder.name);
coder.coding();

工厂方法和构造方法都有着一个相同的缺点,就是每创建一个实例,都会实例化该类的每个函数。

原型链

function coder(){}
coder.prototype.name = '现代魔法';
coder.prototype.job = '程序员';
coder.prototype.coding = function(){
    alert('我正在写代码');
};
var coder = new coder();
alert(coder.name);
coder.coding();

原型链有个缺点就是它所有属性都共享,只要一个实例改变其他的都会跟着改变。如:
var coder1 = new coder();
var coder2 = new coder();
alert(coder1.name);     /*显示现代魔法*/
coder2.name = 'nowamagic';
alert(coder1.name);     /*显示nowamagic*/
alert(coder2.name);     /*这个也显示nowamagic*/

混合方式
以上三种都有着各自的缺点,所以我们要加以改进。
function coder()
{
    this.name = '现代魔法';
    this.job = '程序员';
}
coder.prototype.coding = function(){
    alert('我正在写代码');
};

动态原链
要解决前三种的缺点,还有一种方法。
function coder()
{
    this.name = '现代魔法';
    this.job = '程序员';
    if (typeof(coder._init) == 'undefined')
    {
        this.coding = function ()
        {
            alert('我正在写代码');
        };
        this._init = true;
    }
}
Javascript 相关文章推荐
javascript学习随笔(使用window和frame)的技巧
Mar 08 Javascript
jquery插件制作 自增长输入框实现代码
Aug 17 jQuery
jQuery处理xml格式的返回数据(实例解析)
Nov 28 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
使用jQuery设置disabled属性与移除disabled属性
Aug 21 Javascript
jquery validate demo 基础
Oct 29 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
May 24 Javascript
3分钟掌握常用的JS操作JSON方法总结
Apr 25 Javascript
详解vue中computed 和 watch的异同
Jun 30 Javascript
微信小程序调用摄像头隐藏式拍照功能
Aug 22 Javascript
js实现拖拽与碰撞检测
Sep 18 Javascript
JavaScript执行机制详细介绍
Dec 06 Javascript
Json字符串转换为JS对象的高效方法实例
May 01 #Javascript
Jquery post传递数组方法实现思路及代码
Apr 28 #Javascript
javascript中的onkeyup和onkeydown区别介绍
Apr 28 #Javascript
JQuery中如何传递参数如click(),change()等具体实现
Apr 28 #Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
Apr 28 #Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
Apr 28 #Javascript
jquery在IE、FF浏览器的差别详细探讨
Apr 28 #Javascript
You might like
PHP+DBM的同学录程序(4)
2006/10/09 PHP
PHP集成FCK的函数代码
2008/09/27 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
python入门教程之识别验证码
2017/03/04 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
python提取log文件内容并画出图表
2019/07/08 Python
python 弧度与角度互转实例
2020/04/15 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
医学生自我鉴定范文
2013/11/08 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
宝宝满月酒主持词和仪式流程
2014/03/27 职场文书
病媒生物防治方案
2014/05/13 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
婚礼答谢词
2015/01/04 职场文书
安全承诺书
2015/01/19 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP