`

Javascript子类与继承_覆盖基类方法

 
阅读更多
<!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方法继承、方法重载、方法覆盖小结.doc

    方法覆盖是 Java 编程语言的一种机制,允许子类定义一个与父类中方法相同的方法,以便于覆盖父类的方法。方法覆盖可以使子类提供自己的实现,以便于更好地满足特定的需求。例如,一个子类可以覆盖父类中的一个方法,...

    16-1【SV精通3】类的方法和继承_动态对象_包的使用.zip

    继承是OOP中的一个重要特性,允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。这有助于代码重用,并且可以构建层次结构,使得更具体的类可以扩展或修改通用类的行为。在Java中,我们使用关键字`...

    Javascript玩转继承(一)_.docx

    然而,这种方式存在一些问题,比如在子类中可能会保留对父类构造函数的引用,如果不删除(如`delete this.father`),可能会导致不必要的副作用,或者如果子类中有与父类同名的方法,会覆盖父类的方法。 为了解决...

    简洁理解JavaScript中的封装与继承特性_.docx

    这样,子类就能访问到父类的属性和方法,实现继承。 例如,如果我们想要创建一个`TextBook`类,继承自`Book`,可以这样做: ```javascript function TextBook(name, subject) { Book.call(this, name); // 调用...

    JS在子类中用Object.getPrototypeOf去调用父类方法

    当我们谈论子类与父类(也称为基类)的关系时,继承机制允许子类继承父类的属性和方法。在某些情况下,我们需要在子类中调用父类的方法,以便于扩展或覆盖原有功能。这里我们将深入探讨如何使用`Object....

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

    在JavaScript中,继承是实现面向对象编程的关键部分,尽管过度继承应该避免,但适当使用继承可以有效复用代码。由于JavaScript本身并不直接支持传统的继承概念,开发者通常通过模拟实现。本文将探讨三种主要的...

    第六课 模板方法模式1

    子类可以继承基类,并且只在指定位置扩展或覆盖基类的方法,以此来实现特定的业务需求。这在JavaScript的继承机制下特别适用,因为JavaScript支持基于原型的继承。 【部分内容】展示了模板方法模式的一个实际例子。...

    java script 继承的实现

    在 JavaScript 中,继承主要用于创建类之间的关系,允许子类(派生类)继承父类(基类)的属性和方法,从而实现代码的复用和扩展。本文将深入探讨 JavaScript 中的继承实现方式,并结合提供的 "zinherit.js" 文件来...

    Javascript继承[参考].pdf

    在深入理解JavaScript继承之前,我们需要掌握几个核心概念:父类(也称作超类)是指被继承的类,子类是通过继承父类得到的类,抽象类通常不用于实例化,而是作为其他类继承的基础,基类是提供给其他类继承的类,派生...

    JavaScript继承的特性与实践应用深入详解

    例如,可以创建一个基类(如`Animal`),定义通用的行为,然后派生出多个子类(如`Dog`、`Cat`),在子类中添加特定的特性或方法。这样,代码结构清晰,易于维护。 总结,JavaScript的继承机制通过原型和构造函数...

    一个规范flutter生命周期的Widget基类并且封装了基本属性加快开发速度

    基类`BaseWidget`通常会覆盖这些生命周期方法,比如`build()`, `initState()`, `didChangeDependencies()`, `didUpdateWidget()` 和 `dispose()`,为子类提供统一的行为模板,确保代码规范。 `initState()` 方法是...

    javascript中类和继承(代码示例+prototype.js)

    例如,在框架如React或Vue中,组件的定义往往涉及到类和继承的概念,通过继承基类来扩展功能。 ### 总结 JavaScript的类和继承机制是其面向对象特性的重要组成部分。通过函数构造器、原型链以及`prototype.js`文件...

    Javascript 继承机制的实现

    选定基类后,就可以创建它的子类了。...子类还可添加超类中没有的新属性和方法,也可以覆盖超类中的属性和方法。 4.2.1 继承的方式 和其他功能一样,ECMAScript中实现继承的方式不止一种。这是因为JavaScr

    JS在继承方法中在加其他处理

    在 JavaScript 中,可以通过创建父类实例的方式实现继承,并且可以轻松地在子类中重写父类的方法以添加新的功能或行为。这种方式不仅有助于减少代码冗余,还能够提高代码的可维护性和可扩展性。通过合理利用这些特性...

    详解JavaScript基于面向对象之继承

    在面向对象编程中,继承是一种设计模式,它允许子类继承父类的特征和行为。在这个几何形状的例子中,形状是所有类的基类,包括椭圆形和多边形。椭圆形有焦点数量的属性,而圆形作为椭圆形的子类,继承了椭圆的所有...

    用JavaScript实现单继承和多继承的简单方法

    JavaScript的面向对象特性主要依赖于原型继承,这与传统的类继承有所不同,但同样可以实现单继承和多继承的效果。 ### 单继承的实现 在JavaScript中,单继承可以通过原型链直接实现。以下是一种简洁的实现方式: ...

    js中实现多态采用和继承类似的方法.docx

    ### JavaScript中实现多态的方法 #### 一、前言 在面向对象编程中,多态是一种重要的特性,它允许我们使用一个接口表示多种类型的对象。JavaScript作为一种动态语言,虽然不像Java或C#那样原生支持类和接口的概念,...

    编写可维护面向对象的JavaScript代码[翻译]

    继承则是通过一个类(子类)继承另一个类(基类)的属性和方法来实现代码复用。如果子类重写了继承自基类的方法,则表现出多态性。 维护面向对象JavaScript代码的要点包括: - 保持代码的简洁性和可读性,避免过长...

    Classify.js:用于经典对象继承的 JavaScript 库

    // 创建子类并继承基类 var SubClass = BaseClass.extend({ constructor: function() { // 调用父类构造函数 this._super(); }, subMethod: function() { // 子类方法 } }); // 创建子类实例 var instance =...

    由Javascript的继承引发的:抽象类、接口、多态,甚至是类型转换!

    抽象类在静态类型语言中常见,用于定义不能实例化的基类,强制子类必须实现某些方法。JavaScript没有原生的抽象类,但可以通过构造函数和`throw`语句模拟这一行为。例如: ```javascript function AbstractClass() ...

Global site tag (gtag.js) - Google Analytics