• JavaScript 多种方法实现类


    构造方法

    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;
    }
    }
  • 相关阅读:
    arcgis api for js入门开发系列二十打印地图的那些事
    arcgis api 3.x for js 入门开发系列十九图层在线编辑
    arcgis api 3.x for js 入门开发系列十八风向流动图(附源码下载)
    influxDB 0.9 C# 读写类
    [InfluxDB] 安装与配置
    分布式,集群,冗余的理解
    CentOS 7.0系统安装配置图解教程
    InfluxDB学习之InfluxDB的基本操作| Linux大学
    InfluxDB v1.6.4 下载
    InfluxDB中文文档
  • 原文地址:https://www.cnblogs.com/jenry/p/1953275.html
Copyright © 2020-2023  润新知