JavaScript继承机制模拟实现
来源:互联网 发布:启信宝怎么导出数据 编辑:程序博客网 时间:2024/05/16 15:28
最近因为学校做网站设计,所以一直在ASP上和数据库上大费苦心。我在前一个阶段是做Java程序设计的。突然接到任务并学习ASP,所以我一直都热忠并善于利用JavaScript来构架ASP程序。 JavaScript的一个明显的优点就在于它可以定义和持有自己的对象。这一点好象是VBScript所无法比拟的。有了这一点,可以利用JavaScript进行更接近于面向对象的程序设计。也许这将使网站开发更有乐趣... function Person(){public: // 注意这个public! this.GetName=Person_mfGetName;private: // 注意这个private! this.m_strName="Guest";}function Person_mfGetName(){ return this.m_strName;}var MyPerson=new Person();MyPerson.GetName(); 注意上面的程序中的两个关键字:private 和 public。其实没有这样的用法,这只是我的习惯。 幸好在实际应用中不会有错。 function Student() // Extends Class: Person{EXTENDS: // 注意这个EXTENDS不能使用小写字母形式 this.Super=Person; // 定义指向其"父类构造器"。Super也不能用小写形式 this.Super(); // 调用其"父类构造器"private: this.m_nStudentID=0;} 使用EXTENDS这也是我的习惯,但要切记一定不能使用小写字母。因为extends是JavaScript中的保留字。 var MyStudent=new Student();MyStudent.GetName(); // 调用"父类"的GetName(),结果为返回 "Guest" 关于JavaScript继承实现就是这样。只要牢记两步:
这样就可以继承“父类”的所有属性和方法! 继续关于JavaScript继承机制的讨论。 function Shape(){public: this.CalcuArea=Shape_mfCalcuArea; // 计算面积}function Shape_mfCalcuArea(){ // ...} 很明显的,这个Shape类下的CalcuArea()方法应该是个抽象函数。在Java中可以使用abstract关键字定义抽象函数,而在JavaScript中也没能支持这个特性。抽象函数不应该具有函数体,或者换句话说:在调用Shape.CalcuArea()时应该报错,并终止ASP脚本程序。从PHP程序设计中吸取一些设计经验,我们可以这样处理: function Shape_mfCalcuArea(){ Response.Write("Error, Method Shape_mfCalcuArea Is Abstract"); Response.End();} 这样做,就可以“迫使”自己在Shape的继承类中编写代码重载CalcuArea()方法。 function Rect(){EXTENDS: this.Super=Shape; this.Super();OVERRIDE: this.CalcuArea=Rect_mfCalcuArea;}function Rect_mfCalcuArea(){ // ...} 如果一个类中含有抽象函数,那么这个类必定是抽象类!抽象类是不能被实例化的,必须被子类继承。遗憾的是JavaScript也不支持抽象类定义(如果JavaScript真的支持“抽象类”机制,那么必定支持“继承”机制)。 function Shape(){ Response.Write("Error, Class Shape Is Abstract"); Response.End(); // 其它代码 ...}var MyShape=new Shape(); // 会被告之出错 OKfunction Rect(){EXTENDS: this.Super=Shape; this.Super();}var MyRect=new Rect(); // 仍会被告之出错 OH, NO 因为Shape是一个抽象类,所以在声明第一个MyShape对象时出现了警告。这是我们所期望的。而Rect类很好的继承了Shape类,但还是被告之“Error, Class Shape Is Abstract”。 function Shape(){ if(!this.Super) { Response.Write("Error, Class Shape Is Abstract"); Response.End(); } // 其它代码 ...}var MyShape=new Shape(); // 会被告之出错 OKfunction Rect(){EXTENDS: this.Super=Shape; this.Super();}var MyRect=new Rect(); // 顺利继承 YES, OK 在调用Shape构造器时,Shape类中根本就没定义this.Super成员变量,所以肯定要警告错误信息。而在Rect类中,首先就定义了this.Super的去向:就是指向Shape的构造器。所以在随后的函数调用中,Shape类构造器不会认为this.Super为空了,也就放行让我们通过了... 通过这些示例,我想你可以从中扩充更广的面向对象的特性。篇幅有限,至此收笔。 在文章结束的时候,我给出了一个运行于客户端的JavaScript脚本程序,可以通过查看页面源码来浏览。 |
- JavaScript继承机制模拟实现
- Javascript继承机制的实现
- ECMAScript(JavaScript) 继承机制实现
- javascript类继承的模拟实现
- 经典继承方法实现(模拟extjs底层继承机制)
- JavaScript继承机制的伪实现
- 浅谈JavaScript 继承机制的实现
- JavaScript中的继承机制的实现
- JavaScript中继承机制的实现
- javascript基础6-对象继承机制实现
- [iOS]使用NSProxy实现消息转发机制,模拟多重继承
- [iOS]使用NSProxy实现消息转发机制,模拟多重继承
- [iOS]使用NSProxy实现消息转发机制,模拟多重继承
- 使用NSProxy实现消息转发机制,模拟多重继承
- javascript类继承机制
- Javascript继承机制总结
- Javascript继承机制实例
- 重温Javascript继承机制
- 使用system.web.mail.SMTPmail发送邮件,处理smtp验证问题
- 密码学领域重大发现:山东大学王小云教授成功破解MD5
- 今天激活了自己的blog,可以写点自己的东西了。
- 自动产生存储过程的sql 脚本
- 随机调用记录[SQL Server]
- JavaScript继承机制模拟实现
- int转换到String方法的选择
- 对DTMF在VOIP中应用的研究汇总
- Oracle 常用函数
- 在 ASP.NET 中实现 Model-View-Controller
- 为Eclipse写插件-----Simple Editor
- 漫谈Java程序的性能优化
- 项目经理面试指南
- C#中ListView(CheckBox)一用法