在Javascript中并没有空间、类、接口这些概念,Atlas对这些东西实现封装了,增强了JavaScript面向对象方面的能力,本文看一下如何使用继承。
主要内容
1.概述
2.完整示例
在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>
继承就简单的介绍这么多。
完整示例下载:https://files.cnblogs.com/Terrylee/AtlasInheritanceDemo.rar
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)