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;
        }
    }
  • 相关阅读:
    SuperMap-iServer-单点登录功能验证(CAS)
    Oracle数据库的链接数目超标
    转载---javascript 定时器总结
    JMeter使用文档
    转载--改变ubuntu默认编码为GBK
    遥感数据下载
    Supermap iCloudManager -负载均衡
    XCode: 如何添加自定义代码片段
    imageNamed和dataWithContentsOfFile的区别(1)
    imageNamed 与 imageWithContentsOfFile的区别
  • 原文地址:https://www.cnblogs.com/JoannaQ/p/3052721.html
Copyright © 2011-2022 走看看