zoukankan      html  css  js  c++  java
  • 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;
    }
    }
  • 相关阅读:
    MYSQL转MSSQL
    SVN 服务器IP地址变更后客户端的修改
    gridview
    gridview外边距
    Android开发:自定义GridView/ListView数据源
    Android之Adapter用法总结
    collection set
    listview优化
    android应用开发全程实录-你有多熟悉listview
    android模块
  • 原文地址:https://www.cnblogs.com/jenry/p/1953275.html
Copyright © 2011-2022 走看看