• Atlas学习手记(28):JavaScript面向对象的扩展(二):继承Inheritance


    在Javascript中并没有空间、类、接口这些概念,Atlas对这些东西实现封装了,增强了JavaScript面向对象方面的能力,本文看一下如何使用继承。

    主要内容

    1.概述

    2.完整示例

    一.概述

    在Javascript中并没有空间、类、接口这些概念,Atlas对这些东西实现封装了,增强了JavaScript面向对象方面的能力,本文看一下如何使用继承。简单定义一个可被继承的基类,在注册类时指定类名就可以了:

    BaseClass = function()

    {

        
    // ……

    }


    BaseClass.registerClass(
    "BaseClass");

    定义一个继承类,先要调用父类的构造器,除了传递本身之外还可以传递一些参数,注册类时需要指定继承自哪个类:

    DerivedClass = function()

    {
           
    // ……

           DerivedClass.intializeBase(
    this,arguments); 

    }


    DerivedClass.registerClass(
    "DerivedClass","BaseClass");

    二.完整示例

    看一下Atlas官方网站提供的例子,新建Atlas Web Site,添加一个Inheritance.js的JS文件,定义Person 和Employee两个类 ,并且让Employee继承于Person,Employee覆写父类中的toString方法:

    // JScript File

    Type.registerNamespace(
    "Demo");

    Demo.Person 
    = function(firstName, lastName, emailAddress) {

        
    var _firstName = firstName;

        
    var _lastName = lastName;

        
    var _emailAddress = emailAddress;

        
    this.getFirstName = function() {

            
    return _firstName;
        }


        
    this.getLastName = function() {

            
    return _lastName;
        }


        
    this.getEmailAddress = function() {

            
    return _emailAddress;
        }


        
    this.setEmailAddress = function(emailAddress) {

            _emailAddress 
    = emailAddress;
        }


        
    this.getName = function() {

            
    return _firstName + ' ' + _lastName;
        }


        
    this.dispose = function() {

            alert('bye ' 
    + this.getName());

        }

    }


    Demo.Person.registerClass('Demo.Person', 
    null, Sys.IDisposable);

    Demo.Person.prototype.sendMail 
    = function() {

        
    var emailAddress = this.getEmailAddress();

        
    if (emailAddress.indexOf('@') < 0{

            emailAddress 
    = emailAddress + '@example.com';

        }


        alert('Sending mail to ' 
    + emailAddress + ' ');

    }


    Demo.Person.prototype.toString 
    = function() {

        
    return this.getName() + ' (' + this.getEmailAddress() + ')';

    }


    Demo.Employee 
    = function(firstName, lastName, emailAddress, team, title) {

        Demo.Employee.initializeBase(
    this, [firstName, lastName, emailAddress]);

        
    var _team = team;

        
    var _title = title;

        
    this.getTeam = function() {

            
    return _team;
        }


        
    this.setTeam = function(team) {

            _team 
    = team;
        }


        
    this.getTitle = function() {

            
    return _title;
        }


        
    this.setTitle = function(title) {

            _title 
    = title;
        }


    }


    Demo.Employee.registerClass('Demo.Employee', Demo.Person);

    Demo.Employee.prototype.toString 
    = function() {

        
    return Demo.Employee.callBaseMethod(this, 'toString') + '"r"n' + this.getTitle() + '"r"n' + this.getTeam();

    }

    在ASPX页面中引入该JS文件:

    <script type="text/javascript" src="Inheritance.js"></script>

    编写一些客户端脚本来进行测试,代码如下所示,每个测试大家可以运行后看一下:

    <script type="text/javascript" language="JavaScript">

        
    function GetTestPerson() 
        
    {
            
    return new Demo.Person('Jane', 'Doe', 'jane.doe@example.com');
        }


        
    function GetTestEmployee() 
        
    {
            
    return new Demo.Employee('John', 'Doe', 'john.doe@example.com', 'Platform', 'Programmer');

        }


        
    function OnTestNewClick() {

            
    var aPerson = GetTestPerson();

            alert(aPerson.getFirstName());

            alert(aPerson);

            alert(Object.getType(aPerson).getName());

            
    var testPerson = GetTestPerson();

            alert(testPerson.getFirstName());

            alert(testPerson);

            
    return false;
        }


        
    function OnTestDisposeClick() {

            
    var aPerson = GetTestEmployee();

            alert(aPerson.getFirstName());

            aPerson.dispose();
        }


        
    function OnTestPrivatePropertyClick() {

            
    var aPerson = GetTestEmployee();

            alert('aPerson._firstName 
    = ' + aPerson._firstName);

            alert('aPersona.getFirstName() 
    = ' + aPerson.getFirstName());

            
    return false;
        }


        
    function OnTestInstanceMethodClick() {

            
    var aPerson = GetTestEmployee();

            aPerson.sendMail('Hello', 'This is a test mail.');

            
    return false;
        }


        
    function OnTestOverrideMethodClick() {

            
    var testPerson = GetTestEmployee();

            alert(testPerson);

            
    return false;
        }


        
    function OnTestInstanceOfClick() {

            
    var aPerson = GetTestEmployee();

            
    if (Demo.Employee.isInstanceOfType(aPerson)) {

                alert(aPerson.getName() 
    + ' is an Employee instance."r"nTitle property: ' + aPerson.getTitle());

            }


            
    return false;
        }

    </script>

    继承就简单的介绍这么多。 

    完整示例下载

  • 相关阅读:
    【SHOI2002】百事世界杯之旅
    【LGOJ 3384】树链剖分
    [20191006机房测试] 括号序列
    [20191006机房测试] 矿石
    【SHOI2012】回家的路
    [20191005机房测试] Seat
    [20191005机房测试] Silhouette
    每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样
    fgets函数读取最后一行的时候为什么会重复
    c语言中返回的变量地址,其物理地址在?(刨根问底)
  • 原文地址:https://www.cnblogs.com/qfb620/p/1121065.html
Copyright © 2020-2023  润新知