`
阳光暖暖
  • 浏览: 13268 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
最近访客 更多访客>>
社区版块
存档分类
最新评论

继承机制的实现(2):实例

阅读更多
xbObjects的目的是为JavaScript提供更强的面向对象模型,不只支持继承,还支持方法的重载和调用超类方法的能力。要实现这一点,xbObjects需要执行下面的几步。

第一步:必须注册类,需定义它继承了那个类,调用方式如下: _classes.registerClass("Subclass_Name","Superclass_Name");
这里,子类和超类名都以字符串形式传进来,而不是指向它们的构造函数的指针。这个调用必须放在指定子类的构造函数前。如果新的类没有继承任何类,调用registerClass()时也可以只用第一个参数。

第二步:在构造函数内部调用defineClass()方法,传给它类名即被Clary称为原型函数的(prototype function)的指针,该函数用于初始化对象的所有属性和方法。例如:

_classes.registerClass("ClassA");
function ClassA(color) {
   _classes.defineClass("ClassA",prototypeFunction);
   function prototypeFunction() {
   //...
   }
}

可以看到,原型函数(prototypeFunction())位于构造函数内部。它的主要用途是在适当的时候把所有方法赋予该类(在这一点上与动态原型相似)

第三步是为该类创建init()方法。该方法负责设置该类的所有属性,它必须接受与构造函数相同的参数。作为一种规约,init()方法总是在defineClass()方法后调用。例如:

_classes.registerClass("ClassA");
function ClassA(sColor) {
_classes.defineClass("ClassA",prototypeFunction);
this.init(sColor);
function prototypeFunction() {
ClassA.prototype.init=function(sColor){
this.parentMethod("init");
this.color=sColor;
};
}
}

注意到在init()方法中调用了parentMethod()方法。xbObjects以这种方式允许类调用它的超类的方法。 parentMethod()方法接受任意多个参数,但第一个参数总是要调用的父类方法的名字(该参数必须是字符串,而不是函数指针),所有其他参数都被传给父类的方法。

第四步也是最后一步,在原型函数内添加类的其他方法:

_classes.registerClass("ClassA");
function ClassA(sColor){
_classes.defineClass("ClassA",prototypeFunction);
this.init(sColor);
function prototypeFunction() {
ClassA.prototype.init=function(sColor){
this.parentMethod("init");
this.color=sColor;
};
ClassA.prototype.showColor=function() {
alert(this.color);
};
}
}

然后,可以利用常规方式创建类的实例,并调用类的方法:

var aClass=new ClassA("red");
aClass.showColor();

例子:重写多边形类
<script type="text/javascript" src="xbObjects.js"></script>
<script type="text/javascript">
//继承机制的实现(2):实例
//其他的继承方式-xbObjects
//重写多边形类的例子
//首先重写Polygon类
_classes.registerClass("Polygon");
function Polygon(iSides){
	_classes.defineClass("Polygon",prototypeFunction);
	this.init(iSides);
	function prototypeFunction(){
		Polygon.prototype.init=function(iSides){
			this.parentMethod("init");
			this.sides=iSides;
		};
		Polygon.prototype.getArea=function(){
			return 0;
		};
	}
}
//接着重写Triangle类
_classes.registerClass("Triangle","Polygon");
function Triangle(iBase,iHeight){
	_classes.defineClass("Triangle",prototypeFunction);
	this.init(iBase,iHeight);
	function prototypeFunction(){
		Triangle.prototype.init=function(iBase,iHeight){
			this.parentMethod("init",3);
			this.base=iBase;
			this.height=iHeight;
			};
		Triangle.prototype.getArea=function(){
			return 0.5*(this.base)*(this.height);
			};
		}
	}
//Rectangle类的重写
_classes.registerClass("Rectangle","Polygon");
function Rectangle(iLength,iWidth){
	_classes.defineClass("Rectangle",prototypeFunction);
	this.init(iLength,iWidth);
	function prototypeFunction(){
		Rectangle.prototype.init=function(iLength,iWidth){
			this.parentMethod("init",4);
			this.length=iLength;
			this.width=iWidth;
		};
		Rectangle.prototype.getArea=function(){
			return (this.length)*(this.width);
		};
	}
}
//测试
var tri=new Triangle(4,8);//输出16
alert(tri.getArea());
var rec=new Rectangle(4,8);//输出32
alert(rec.getArea());
</script>

分享到:
评论

相关推荐

    Java 实现继承实例代码

    在Java编程语言中,继承是面向对象特性之一,它允许我们创建一个类(子类或派生类)作为现有类(父类...通过学习这个实例,开发者能够更好地理解和运用Java的继承机制,从而在实际项目中实现更灵活、可扩展的代码结构。

    通过实例来剖析C#继承机制

    在`案例3:通过实例来剖析C#继承机制`中,你可能将看到如何创建一个实际的继承链,如何调用父类和子类的方法,以及如何利用继承实现特定的业务逻辑。通过这种方式,你可以更深入地理解C#继承的实际应用和优势。 总...

    深入剖析C#继承机制

    通过理解和掌握以上C#继承机制的知识点,开发者可以在设计和实现类结构时更灵活、高效地利用代码复用,同时保证代码的可扩展性和维护性。在实际项目中,合理运用继承可以极大地提高软件开发的效率和质量。

    JavaScript继承机制研究.pdf

    寄生式继承是一种特殊的继承机制,它通过在子类中创建一个父类的实例,然后将其作为子类的原型来实现继承。这种继承机制非常灵活和强大,但它也存在一些缺点,例如,它不能实现多重继承。 Class Extend Class ...

    JavaScript继承机制探讨及其应用.pdf

    2. 构造函数继承(Constructor Inheritance):这是 JavaScript中另一种常用的继承机制,通过将一个构造函数的 prototype 属性设置为另一个构造函数的实例,从而实现继承。 3. 混合继承(Mixins Inheritance):这是...

    《Java从入门到精通:实例版》源程序

    书中会通过实例来演示如何设计和使用类,以及如何利用继承和多态性来实现代码的复用和扩展。 3. **异常处理**:在编程中,异常是不可避免的。Java提供了丰富的异常处理机制,如try-catch-finally结构,帮助开发者...

    java继承类实例

    总的来说,这个程序展示了Java中类的继承机制,如何通过构造方法传递参数来初始化对象,以及子类如何覆盖或扩展父类的属性。理解这些概念对于进行Java编程至关重要,因为它们构成了面向对象设计的基础。通过这样的...

    通过实例来剖析C#继承机制.rar

    本实例将深入剖析C#中的继承机制,帮助你更好地理解和应用这一概念。 首先,继承的基本语法是使用冒号(:)来表示子类对基类的继承。例如: ```csharp public class BaseClass { // 基类成员 } public class ...

    java script 继承的实现

    JavaScript 是一种广泛应用于 Web 开发的脚本语言,它的继承机制是其面向对象特性的重要组成部分。在 JavaScript 中,继承主要用于创建类之间的关系,允许子类(派生类)继承父类(基类)的属性和方法,从而实现代码...

    继承Thread类构造多线程实例

    2. **继承Thread类**: - 当我们创建一个新的类继承自`Thread`时,这个类的实例就是线程对象。我们需要重写`Thread`类的`run()`方法,将线程需要执行的任务放入其中。 - 实例化这个类后,调用`start()`方法会启动...

    Javascript中3种实现继承的方法和代码实例_.docx

    总结来说,JavaScript中的继承机制虽然没有像其他面向对象语言那样直接,但通过对象冒充、原型继承和混合继承等方式,开发者可以有效地实现代码复用和面向对象的设计。在实际应用中,应根据项目需求选择合适的继承...

    Qt实现程序单实例运行

    本文将深入探讨如何使用Qt实现程序单实例运行的两种方案,并对提供的源码修改进行解析。 ### 方案一:文件锁 文件锁是一种常见的实现单实例程序的方法,它通过创建一个临时文件或特定的标志文件来检查程序是否已经...

    delphi窗体继承实例

    2. **继承机制**:在Delphi中,通过在派生窗体的声明中使用`inherits`关键字,可以指定其继承自哪个基类窗体。例如,`TFooForm = class(TBaseForm)`表示`TFooForm`继承自`TBaseForm`。 3. **覆盖或扩展方法**:在...

    关于c++继承的一个实例,适用于初学者

    在C++编程语言中,继承是面向对象编程(OOP)的一个核心...学习这个实例将帮助初学者更好地理解C++中的继承机制及其在实际编程中的应用。通过动手实践,你可以加深对这一重要概念的理解,为以后的C++编程打下坚实基础。

    js继承实现示例代码

    通过上述示例代码,我们了解了如何在JavaScript中实现简单的继承机制。虽然这段代码提供了一种实现方式,但在实际项目中,更推荐使用ES6的类语法来实现继承,因为它更简洁且易于理解。此外,也可以考虑使用现有的库...

    JavaScript继承与多继承实例分析.docx

    JavaScript的继承机制主要基于原型链,本文将深入探讨JavaScript的继承与多继承,并通过实例进行分析。 1. **JavaScript继承** - **原理**:JavaScript的继承主要是通过原型链(prototype chain)来实现的。每个...

    java 类的继承 基础理解

    Java 语言中的继承机制允许一个类继承另一个类的属性和行为,实现代码的重用和继承关系建模。在 Java 中,继承是通过使用 `extends` 关键字来实现的,格式为 `public 子类 extends 父类{}`。 继承的优点: 1. 代码...

    关于c#继承机制的详细概述

    【C#继承机制详解】 C#作为一门面向对象的编程语言,其继承性(Inheritance)是核心特性之一,旨在促进代码的复用和扩展,提高软件开发的效率。继承允许一个类(派生类)从另一个类(基类)获取特征和功能,同时还...

Global site tag (gtag.js) - Google Analytics