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 相关文章推荐
利用js的Node遍历找到repeater的一个字段实例介绍
Apr 25 Javascript
谈谈javascript中使用连等赋值操作带来的问题
Nov 26 Javascript
JavaScript开发者必备的10个Sublime Text插件
Feb 27 Javascript
JavaScript基础——使用Canvas绘图
Nov 02 Javascript
Vue-CLI3.x 设置反向代理的方法
Dec 06 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
Apr 26 Javascript
vue+layui实现select动态加载后台数据的例子
Sep 20 Javascript
vue点击自增和求和的实例代码
Nov 06 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
Dec 17 Javascript
JQuery表单元素取值赋值方法总结
May 12 jQuery
JS实现躲避粒子小游戏
Jun 18 Javascript
JavaScript声明变量和数据类型的转换
Apr 12 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
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
《APMServ 5.1.2》使用图解
2006/10/23 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
2016/11/16 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
python远程登录代码
2008/04/29 Python
决策树的python实现方法
2014/11/18 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
世界上最大的折扣香水店:FragranceNet.com
2016/10/26 全球购物
J2EE面试题
2016/03/14 面试题
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
11月红领巾广播稿
2014/01/17 职场文书
总裁助理岗位职责
2014/02/17 职场文书
化学教育专业求职信
2014/07/08 职场文书
律师授权委托书范本
2014/10/07 职场文书
2014年小学工作总结
2014/11/26 职场文书
2015公司年度工作总结
2015/05/14 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python