<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>Javascript子类与继承</title> </head> <body> <script type="text/javascript"> //定义一个基类 function Rectangle(w,h) { this.width = w; this.height=h; } Rectangle.prototype.area = function(){return this.width * this.height;}; //定义基类的一个方法 Rectangle.prototype.toString = function(){ return "[" + this.width + "," + this.height + "]";}; //继承Rectangle,定义子类的构造函数 function PositonRectangle(x,y,w,h) { Rectangle.call(this,w,h);//调用基类方法,使用call方法,将基类的this替换为当前的this this.x = x; this.y = y; } //继承基类的方法 PositonRectangle.prototype = new Rectangle();//这样赋值后,原来Rectangle的prototype也被当成PositonRectangle.prototype的直接属性了. //prototype这个相当于类属性,只有类才能访问(这里是函数名称.prototype这样访问),当使用new示例化出的每一个对象都保留了对该对象类的prototype的引用 //是的每个对象都可以访问prototype中的属性 //是的PositonRectangle.prototype.prototype 没有,因此下面的语句 输出为 undefined //alert(PositonRectangle.prototype.prototype);//test //alert(typeof PositonRectangle.area);//输出 undefined //alert(typeof (new PositonRectangle(2,2,2,2)).area);//输出function,即,prototype中的属性,只有使用new示例话了一个对象后,才会产生,否则为undefined //删除基类的 width和height,因为子类中已经有了通过 子类 构造函数中 Rectangle.call(this,w,h); 这句实现 delete PositonRectangle.prototype.width; delete PositonRectangle.prototype.height; //修改子类的constructor属性,因为子类是通过构造函数中 Rectangle.call(this,w,h); 这句实现,使得子类的constructor变成了基类的constructor(Rectangle) PositonRectangle.prototype.constructor = PositonRectangle; //现在可以添加子类方法了 PositonRectangle.prototype.contains = function(x,y) { return(x > this.x && x < this.x + this.width && y > this.y && y < this.y + this.height); } //覆盖基类的toString方法 PositonRectangle.prototype.toString = function() { return "(" + this.x + "," + this.y + ")" + //子类的字段 Rectangle.prototype.toString.apply(this);// 特殊方式调用基类方法,必须使用这种方式调用,无法使用子类方法 } //使用子类,定义一个子类对象,调用子类方法和从基类中继承的方法 var r = new PositonRectangle(2,2,2,2); document.writeln(r); document.writeln(r.contains(3,3)); document.writeln(r.area()); //使用子类的字段 document.writeln(r.x + "," + r.y + "," + r.width + "," + r.height ); document.writeln(r instanceof PositonRectangle && r instanceof Rectangle && r instanceof Object); //true </script> </body> </html>
相关推荐
方法覆盖是 Java 编程语言的一种机制,允许子类定义一个与父类中方法相同的方法,以便于覆盖父类的方法。方法覆盖可以使子类提供自己的实现,以便于更好地满足特定的需求。例如,一个子类可以覆盖父类中的一个方法,...
继承是OOP中的一个重要特性,允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。这有助于代码重用,并且可以构建层次结构,使得更具体的类可以扩展或修改通用类的行为。在Java中,我们使用关键字`...
然而,这种方式存在一些问题,比如在子类中可能会保留对父类构造函数的引用,如果不删除(如`delete this.father`),可能会导致不必要的副作用,或者如果子类中有与父类同名的方法,会覆盖父类的方法。 为了解决...
这样,子类就能访问到父类的属性和方法,实现继承。 例如,如果我们想要创建一个`TextBook`类,继承自`Book`,可以这样做: ```javascript function TextBook(name, subject) { Book.call(this, name); // 调用...
当我们谈论子类与父类(也称为基类)的关系时,继承机制允许子类继承父类的属性和方法。在某些情况下,我们需要在子类中调用父类的方法,以便于扩展或覆盖原有功能。这里我们将深入探讨如何使用`Object....
在JavaScript中,继承是实现面向对象编程的关键部分,尽管过度继承应该避免,但适当使用继承可以有效复用代码。由于JavaScript本身并不直接支持传统的继承概念,开发者通常通过模拟实现。本文将探讨三种主要的...
子类可以继承基类,并且只在指定位置扩展或覆盖基类的方法,以此来实现特定的业务需求。这在JavaScript的继承机制下特别适用,因为JavaScript支持基于原型的继承。 【部分内容】展示了模板方法模式的一个实际例子。...
在 JavaScript 中,继承主要用于创建类之间的关系,允许子类(派生类)继承父类(基类)的属性和方法,从而实现代码的复用和扩展。本文将深入探讨 JavaScript 中的继承实现方式,并结合提供的 "zinherit.js" 文件来...
在深入理解JavaScript继承之前,我们需要掌握几个核心概念:父类(也称作超类)是指被继承的类,子类是通过继承父类得到的类,抽象类通常不用于实例化,而是作为其他类继承的基础,基类是提供给其他类继承的类,派生...
例如,可以创建一个基类(如`Animal`),定义通用的行为,然后派生出多个子类(如`Dog`、`Cat`),在子类中添加特定的特性或方法。这样,代码结构清晰,易于维护。 总结,JavaScript的继承机制通过原型和构造函数...
基类`BaseWidget`通常会覆盖这些生命周期方法,比如`build()`, `initState()`, `didChangeDependencies()`, `didUpdateWidget()` 和 `dispose()`,为子类提供统一的行为模板,确保代码规范。 `initState()` 方法是...
例如,在框架如React或Vue中,组件的定义往往涉及到类和继承的概念,通过继承基类来扩展功能。 ### 总结 JavaScript的类和继承机制是其面向对象特性的重要组成部分。通过函数构造器、原型链以及`prototype.js`文件...
选定基类后,就可以创建它的子类了。...子类还可添加超类中没有的新属性和方法,也可以覆盖超类中的属性和方法。 4.2.1 继承的方式 和其他功能一样,ECMAScript中实现继承的方式不止一种。这是因为JavaScr
在 JavaScript 中,可以通过创建父类实例的方式实现继承,并且可以轻松地在子类中重写父类的方法以添加新的功能或行为。这种方式不仅有助于减少代码冗余,还能够提高代码的可维护性和可扩展性。通过合理利用这些特性...
在面向对象编程中,继承是一种设计模式,它允许子类继承父类的特征和行为。在这个几何形状的例子中,形状是所有类的基类,包括椭圆形和多边形。椭圆形有焦点数量的属性,而圆形作为椭圆形的子类,继承了椭圆的所有...
JavaScript的面向对象特性主要依赖于原型继承,这与传统的类继承有所不同,但同样可以实现单继承和多继承的效果。 ### 单继承的实现 在JavaScript中,单继承可以通过原型链直接实现。以下是一种简洁的实现方式: ...
### JavaScript中实现多态的方法 #### 一、前言 在面向对象编程中,多态是一种重要的特性,它允许我们使用一个接口表示多种类型的对象。JavaScript作为一种动态语言,虽然不像Java或C#那样原生支持类和接口的概念,...
继承则是通过一个类(子类)继承另一个类(基类)的属性和方法来实现代码复用。如果子类重写了继承自基类的方法,则表现出多态性。 维护面向对象JavaScript代码的要点包括: - 保持代码的简洁性和可读性,避免过长...
// 创建子类并继承基类 var SubClass = BaseClass.extend({ constructor: function() { // 调用父类构造函数 this._super(); }, subMethod: function() { // 子类方法 } }); // 创建子类实例 var instance =...
抽象类在静态类型语言中常见,用于定义不能实例化的基类,强制子类必须实现某些方法。JavaScript没有原生的抽象类,但可以通过构造函数和`throw`语句模拟这一行为。例如: ```javascript function AbstractClass() ...