//语法甘露:
        var object =        //定义小写的object基本类,用于实现最基础的方法等
        {
                isA: function(aType)     //一个判断类与类之间以及对象与类之间关系的基础方法
                {
                        var self = this;
                        while(self)
                        {
                                if (self == aType)
                                    return true;
                                self = self.Type;
                        };
                        return false;
                }
        };
        
        function Class(aBaseClass, aClassDefine)        //创建类的函数,用于声明类及继承关系
        {
                function class_()     //创建类的临时函数壳
                {
                        this.Type = aBaseClass;        //我们给每一个类约定一个Type属性,引用其继承的类
                        for(var member in aClassDefine)
                                this[member] = aClassDefine[member];        //复制类的全部定义到当前创建的类
                };
                class_.prototype = aBaseClass;
                return new class_();
        };
        
        function New(aClass, aParams)     //创建对象的函数,用于任意类的对象创建
        {
                function new_()         //创建对象的临时函数壳
                {
                        this.Type = aClass;        //我们也给每一个对象约定一个Type属性,据此可以访问到对象所属的类
                        if (aClass.Create)
                            aClass.Create.apply(this, aParams);     //我们约定所有类的构造函数都叫Create,这和DELPHI比较相似
                };
                new_.prototype = aClass;
                return new new_();
        };

//语法甘露的应用效果:        
        var Person = Class(object,            //派生至object基本类
        {
                Create: function(name, age)
                {
                        this.name = name;
                        this.age = age;
                },
                SayHello: function()
                {
                        alert("Hello, I'm " + this.name + ", " + this.age + " years old.");
                }
        });
        
        var Employee = Class(Person,        //派生至Person类,是不是和一般对象语言很相似?
        {
                Create: function(name, age, salary)
                {
                        Person.Create.call(this, name, age);    //调用基类的构造函数
                        this.salary = salary;
                },
                ShowMeTheMoney: function()
                {
                        alert(this.name + " $" + this.salary);
                }
        });

var BillGates = New(Person, ["Bill Gates", 53]);
        var SteveJobs = New(Employee, ["Steve Jobs", 53, 1234]);
        BillGates.SayHello();
        SteveJobs.SayHello();
        SteveJobs.ShowMeTheMoney();
        
        var LittleBill = New(BillGates.Type, ["Little Bill", 6]);     //根据BillGate的类型创建LittleBill
        LittleBill.SayHello();
        
        alert(BillGates.isA(Person));             //true
        alert(BillGates.isA(Employee));         //false
        alert(SteveJobs.isA(Person));             //true
        alert(Person.isA(Employee));                //false
        alert(Employee.isA(Person));                //true

转载于:https://blog.51cto.com/taoshi/1176278

javascript,继承,封装相关推荐

  1. JavaScript 继承 封装 多态实现及原理详解

    封装 就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 封装是面向对象的特征之一,是对象和类概念的主要特性. 简单的说,一个类就是一个封装了 ...

  2. 面向对象的 JavaScript:封装、继承与多态

    本文作者:家园工作室研发组成员 @维尔希宁 本文出处: 面向对象的 JavaScript:封装.继承与多态​blog.lenconda.top 本文遵循署名-非商业性使用-禁止演绎3.0 未本地化版本 ...

  3. Javascript继承机制的设计思想

    我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...

  4. 探寻完美 之 JavaScript继承

    本文并不想探讨JavaScript的面向对象特性(如果有兴趣,可参看我的<领悟面向对象JavaScript>),也不会涉及全部的面向对象概念,只是试图寻找一个还未被任何人发现的" ...

  5. 【JavaScript】重温Javascript继承机制

    上段时间,团队内部有过好几次给力的分享,这里对西风师傅分享的继承机制稍作整理一下,适当加了些口语化的描述,留作备案. 一.讲个故事吧 澄清在先,Java和Javascript是雷锋和雷峰塔的关系.Ja ...

  6. [转]JavaScript继承详解

    原文地址:http://www.cnblogs.com/sanshi/archive/2009/07/08/1519036.html 面向对象与基于对象 几乎每个开发人员都有面向对象语言(比如C++. ...

  7. 重温Javascript继承机制

    上段时间,团队内部有过好几次给力的分享,这里对西风师傅分享的继承机制稍作整理一下,适当加了些口语化的描述,留作备案. 一.讲个故事吧 澄清在先,Java和Javascript是雷锋和雷峰塔的关系.Ja ...

  8. JavaScript继承详解(四)

    文章截图 - 更好的排版 在本章中,我们将分析Douglas Crockford关于JavaScript继承的一个实现 - Classical Inheritance in JavaScript. C ...

  9. JavaScript继承详解(四) 转

    在本章中,我们将分析Douglas Crockford关于JavaScript继承的一个实现 - Classical Inheritance in JavaScript. Crockford是Java ...

最新文章

  1. python自带的库有哪些_python常用的内置库
  2. openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案...
  3. 广度优先搜索求解迷宫问题
  4. IE JS关闭窗口不提示的方法
  5. 天津农学院计算机考研专业,2021年天津农学院计算机与信息工程学院考研专业目录_研究生考试范围 - 学途吧...
  6. 关于 awesome-algorithm 仓库中 Python Leetcode 代码删除一事
  7. onpostexecute 中更新adapter 事变_Mac音频转换器----Adapter
  8. [转]博士的学习经验!读后,令人茅塞顿开的科研经典之作
  9. 04-AskDoctorForHelp-向医生寻求帮助
  10. 修改 docker容器hosts文件
  11. iir滤波器c语言程序,请教C语言做iir滤波器问题
  12. 10个3d立体字ps金属字图层样式下载
  13. AutoPatchnbsp;warning:zfaprod.txtnbsp;do…
  14. CSS3鼠标悬停图片360度旋转效果
  15. 中国农业大学821数据结构计算机考研
  16. 【游戏逆向】老飞飞怀恋魅力爱玩等老飞飞瞬移分析代码
  17. 心电图心电轴怎么计算_心电图心电轴计算表
  18. Habor镜像仓库的搭建
  19. 计算机工作自动化的特点,计算机内部自动化操作等特点.doc
  20. 网络流量 pv、uv、ip 各代表的含义

热门文章

  1. 复数特征值求特征向量_深刻地认识特征值
  2. 英文句子改写在线软件_试完这些英文论文写作辅助神器,你会发现新大陆der~...
  3. python花萼长度表_Python 数据分析答疑 5:Pandas入门
  4. Maltego更新到4.1.6
  5. OSNIT信息收集分析框架OSRFramework
  6. 反汇编引擎Capstone
  7. 计算机四级分数怎么查,计算机三四级成绩查询正确打开方式
  8. iOS 数据计算带小数点导致数据不精确问题
  9. android碎片功能实现,Android 列表碎片
  10. java中bufferendwriter_Java IO系列(三)Writer