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;
    }
    }
  • 相关阅读:
    <img>标签
    <a>标签
    HTML标签类型
    HTML实体
    HTML颜色的三种写法
    HTML绝对路径和相对路径
    HTML基本结构及标签样式
    Java Activiti 工作流引擎 springmvc SSM 流程审批 后台框架源码
    java ssm 后台框架平台 项目源码 websocket IM quartz springmvc
    分批插入数据基于mybatis
  • 原文地址:https://www.cnblogs.com/jenry/p/1953275.html
Copyright © 2011-2022 走看看