zoukankan      html  css  js  c++  java
  • JS实现继承多态

    //类对象构造模版,无new访问,类似静态访问
    var Class = {
        create: function () {
            return function ()
            {
                //initialize初始化
                //apply应用变更,可以反复请求
                //arguments参数
                this.initialize.apply(this, arguments)
            };
        },
        //模拟抽象方法,可以随便自己定
        Show: function () {
        }
    };
    
    
    //模拟继承extobj扩展对象,srcobj源对象
    var Extend = function (extobj, srcobj) {
        for (var a in srcobj) {
            extobj[a] = srcobj[a];
        }
        return extobj;
    };
    
    //动态为Object添加extend方法,用来完成继承
    Object.prototype.extend = function (obj) {
        return Extend.apply(this, [this, obj]);
    };
    
    
    
    //实例演示
    var ClassAB = Class.create();
    ClassAB.prototype = {
        //初始函数,相当于构造方法
        initialize: function (name) {
            this.name = name;
        },
        Show: function (a) {
            this.abstractShow(a); //抽象方法
        }
    };
    
    
    
    //继承
    var ClassA = Class.create();
    ClassA.prototype = new ClassAB(null).extend({
        Show: function (a) { //实现抽象方法
            alert(this.name + " " + typeof (this) + " " + a);
        }
    
    });
    
    var ClassB = Class.create();
    ClassB.prototype = new ClassAB(null).extend({
        Show: function (a) { //实现抽象方法
            alert(this.toString + " " + typeof (this) + " " + a+new Date().toDateString());
        }
    });
    
    
    //多态
    ClassAB = new ClassA("ClassA");
    ClassAB.Show("hello");
    
    ClassAB = new ClassB("ClassB");
    ClassAB.Show("hello");
  • 相关阅读:
    Mac php使用gd库出错 Call to undefined function imagettftext()
    centos 使用 locate
    Mac HomeBrew 安装 mysql
    zsh 命令提示符 PROMPT
    新的开始
    Java 面试题分析
    Java NIO Show All Files
    正确使用 Volatile 变量
    面试题整理 2017
    有10阶梯, 每次走1,2 or 3 阶,有多少种方式???
  • 原文地址:https://www.cnblogs.com/BABLOVE/p/3307846.html
Copyright © 2011-2022 走看看