zoukankan      html  css  js  c++  java
  • JavaScript 多种方法实现类(转)

    摘自:http://www.nowamagic.net/javascript/js_MethodsToCreateClass.php

    构造方法

    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;
        }
    }
  • 相关阅读:
    关于Jonathan S. Weissman与RIT(罗切斯特理工学院,位于纽约)
    jQuery获取元素值以及设置元素值总结
    页面跳转
    Node JS复制文件
    js获取当前日期并格式yyy-MM-dd
    Json文件删除元素
    HTML页面间传值
    计算机实用但冷门快捷键
    NodejS---require的机制
    Node某个JS导出方法变量以及在其他地方引用的例子
  • 原文地址:https://www.cnblogs.com/JoannaQ/p/3052721.html
Copyright © 2011-2022 走看看