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 相关文章推荐
利用了jquery的ajax实现二级联互动菜单
Dec 02 Javascript
一个简单的jquery的多选下拉框(自写)
May 05 Javascript
JavaScript闭包详解
Feb 02 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
Apr 12 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
Oct 21 Javascript
bootstrap 设置checkbox部分选中效果
Apr 20 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
Nov 06 Javascript
基于dataset的使用和图片延时加载的实现方法
Dec 11 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
Mar 21 Javascript
js中offset,client , scroll 三大元素知识点总结
Sep 11 Javascript
Vue 数据响应式相关总结
Jan 28 Vue.js
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下使用iconv需要注意的问题
2010/11/20 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
2016/07/18 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
python实现封装得到virustotal扫描结果
2014/10/05 Python
Python入门必须知道的11个知识点
2018/03/21 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
升职自荐信范文
2013/10/05 职场文书
日语求职信范文
2013/12/17 职场文书
邮政员工辞职信
2014/01/16 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
学校对教师的评语
2014/04/28 职场文书
保证书格式范文
2014/04/28 职场文书
婚前保证书范文
2015/02/28 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
餐厅开业活动方案
2019/07/08 职场文书
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
Java死锁的排查
2022/05/11 Java/Android