`

javascript 面向对象,实现namespace,class,继承,重载

阅读更多

这几天老大天天嚷嚷要重构我们写的javascript,抱怨代码太混乱,可读性差,维护困难,要求javascript也按面对象的模型来重构。
由于组里项目大多的javascript,css等客户端工作是另一同事在负责,该同事又特忙无法重构,老大也就只是提建议并未立即实施重构。但是我前些日子也改过些许客户端的小bug,确实那代码看得让人有些云里雾里,不知身在哪山,轻易不敢动代码,于是就自己动手鼓捣起我曾又爱又恨的javascript来,自己写一个简单的js实现namespace,继承,重载等面向对象的特性.欢迎拍砖灌水
.定义namespace
Namesapce.js
复制代码 代码如下:
Namespace = new Object();
Namespace.register = function(fullname){
try
{
var nsArray = fullname.split(".");
var strNS = "";
var strEval = "";
for(var i=0;i<nsArray.length;i++){
if(strNS.length >0)
strNS += ".";
strNS += nsArray[i];
strEval += " if(typeof("+ strNS +") =='undefined') " + strNS + " = new Object(); ";
}
if(strEval != "") eval(strEval);
}catch(e){alert(e.message);}
}

.Employee.js
Employee.js
复制代码 代码如下:
//注册命名空间
Namespace.register("MyCompany");
//1.类:雇员
MyCompany.Employee = function(empName){
this.Name = empName;
this.Salary = 1000;
this.Position = "cleaner";
}
MyCompany.Employee.prototype.ShowName = function(){
return "I'm "+this.Name+",my salary is $" + this.Salary;
}
MyCompany.Employee.prototype.Work = function(){
return "I'm a "+ this.Position +",I'm cleaning all day!"
}
//2.类:程序员
MyCompany.Developer = function(empName){
//继承父类属性
MyCompany.Employee.call(this,empName);
//覆盖父类属性
this.Position = "developer";
//扩展属性
this.Technology = "C#";
}
//继承父类原型方法
MyCompany.Developer.prototype = new MyCompany.Employee();
//覆盖父类方法
MyCompany.Developer.prototype.Work = function(){
return "I'm a "+ this.Position +",i'm good at "+ this.Technology +",i'm coding all day!"
}

测试代码
复制代码 代码如下:
<html>
<title>javascript 面向对象的实现 namespace,class,继承,重载</title>
<head>
<script language="javascript" src="namespace.js" type="text/javascript"></script>
<script language="javascript" src="employee.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
function showEmployee(){
var emp = new MyCompany.Employee("xiaoming");
showInfo(emp);
}
function showDeveloper(){
var emp = new MyCompany.Developer("Gates");
showInfo(emp);
}
function showInfo(emp){
alert(emp.ShowName());
alert(emp.Work());
}
</script>
</head>
<body>
<input type="button" value="show employee info" onclick="showEmployee();"/><br/><br/>
<input type="button" value="show developer info" onclick="showDeveloper();"/>
</body>
</html>

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    c#程序员对TypeScript的认识过程.docx

    在 C# 中,我们使用 `namespace` 来组织代码,而在 TypeScript 中,虽然没有直接对应的 `namespace` 关键字,但可以通过 `module` 来实现类似的功能。不过,TypeScript 更倾向于使用模块系统,如 ES6 的 `import` 和...

    JScript.NET程序开发

    - **类与对象**:JScript.NET支持类的定义,可以通过`class`关键字创建类,并通过`new`操作符实例化对象。 - **继承**:类可以继承其他类,使用`extends`关键字实现单继承。 - **接口**:接口定义了一组方法签名,类...

    Web服务中的功能重载

    在本文中,我们将探讨如何在几种常见的Web服务技术中实现功能重载,包括ASP.NET、C#和JavaScript。 首先,让我们关注ASP.NET Web服务(ASMX)。在ASP.NET中,创建一个Web服务通常涉及定义一个继承自System.Web....

    最新远光软件笔试内容

    1. **面向对象思想**:包括继承、多态和封装。继承是类之间的层次关系,允许子类继承父类的属性和方法;多态是指同一接口可以有不同的行为;封装则是隐藏对象的属性和实现细节,仅对外提供公共访问方式。 2. **ASP...

    C++常见问题解答。。。。。。。。。

    面向对象编程的主要优点包括封装、继承和多态性,这些特性有助于提高代码的可重用性和可维护性。 #### 9. 如何使用C++的头文件? 在C++中,头文件通常用于声明类、函数和其他类型的接口。这些文件通常以`.h`或者`....

    藏经阁-现代TypeScript高级教程-103.pdf

    类(Class)则提供了面向对象编程的能力,允许定义属性和方法,以及继承和多态。TypeScript 的类支持构造函数、访问修饰符(public、private、protected)和抽象方法。 **五、枚举和泛型** 枚举(Enum)是用于创建...

    TypeScript Handbook 中文版

    TypeScript的主要特性包括类型注解、模块、类等面向对象编程的特性。它的设计目标是让开发大型应用更加容易和方便。TypeScript最终会被编译成普通的JavaScript代码,因此它可以运行在任何支持JavaScript的平台上,...

    extjs+s2页面跳转

    ExtJS与Struts2的集成主要通过AJAX技术实现数据的异步传输,从而避免页面的完全重载,提升用户体验。在Struts2配置文件(struts.xml)中定义了`Login`动作,该动作继承自`ActionSupport`类,并覆盖了`execute()`方法...

    ASP.NET3.5从入门到精通基于C#2008

    **3.2 面向对象的C#实现** - **定义**:类是对象的模板。 - **创建一个类和其方法**:类包含属性和方法。 - **类成员**:包括字段、属性、方法等。 - **构造函数和析构函数**:用于初始化和清理对象资源。 **3.3 ...

    17-declaration-merging(声明合并17).pdf

    这一特性尤其在处理现有的JavaScript库和模块时显得尤为重要,因为它能帮助编译器理解那些通过不同方式定义的对象结构。 声明合并可以应用于三种主要的实体:命名空间、类型和值。命名空间是通过`.`符号访问的命名...

    众多ASP.NET面试题目

    C#不支持传统的多重继承,但是通过接口可以实现类似的效果。例如,一个类可以同时实现多个接口。 ### 10. 计算1-2+3-4+...+n的和 ```csharp int tNum = Convert.ToInt32(this.TextBox1.Text); int sum = 0; for ...

    dt-money:App Para Fluxo de Caixa-Rocketseat

    类用于创建对象,它们支持面向对象编程的特性,如继承、封装和多态。接口则定义了对象的结构,可以用来确保其他对象或者类遵循特定的规范。例如,项目可能有一个 `Transaction` 接口,定义了交易对象应包含的属性和...

    struts2AndUploadify集成

    而Uploadify是一款JavaScript插件,它使用Flash技术实现异步文件上传,可以处理多文件同时上传,提供良好的用户体验。 在Struts2中集成Uploadify,主要是为了解决传统HTML表单提交时可能导致页面刷新的问题,以及...

    一步一步封装自己的HtmlHelper组件BootstrapHelper(三)

    public static class NumberBoxExtensions { // ... public static MvcHtmlString NumberTextBox(this BootstrapHelper html, string id) { return NumberTextBox(html, id, null, null, null, null, null);...

    ASP.NET常用代码

    /// 从系统异常类ApplicationException继承的应用程序异常处理类。 /// 自动将异常内容记录到Windows NT/2000的应用程序日志 /// public class AppException:System.ApplicationException { public AppException() ...

Global site tag (gtag.js) - Google Analytics