`
holdbelief
  • 浏览: 704986 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript 从类继承

阅读更多

从类继承

到这里,我们已经了解了构造函数和原型对象如何使您在JavaScript中模拟类。您可以看到,原型链可以确保所有对象都有Object.prototype的公用方法,以及如何使用闭包来模拟类的私有成员。但这里还缺少点什么。您尚未看到如何从类派生,这在C#中是每天必做的工作。遗憾的是,在JavaScript中从类继承并非像在C#中键入冒号即可继承那样简单,它需要进行更多操作。另一方面,JavaScript非常灵活,可以有很多从类继承的方式。

例如,有一个积累Pet,它有一个派生类Dog,如图9所示。这个在JavaScript中如何实现呢?Pet类很容易。您已经看见如何实现它了:


// class Pet
function Pet(name)
{
        this.getName = function()
        {
               return name;
        }
        this.setName = function(newName)
        {
               name = newName;
        }
}

Pet.prototype.toString = function()
{
        return "This pet's name is: " + this.getName();
}
// end of class Pet

var parrotty = new Pet("Parrotty the Parrot");
alert(parrotty);

 现在,如何创建从Pet派生的类Dog呢?在图9种可以看到,Dog有另一个属性breed,它改写了Pet的toString方法(注意,JavaScript的约定是方法和属性的名称使用camel大小写,而不是在C#中建议的Pascal大小写)。图10显示如何这样做。

 

Figure 10 从 Pet 类派生

// class Dog : Pet
// public Dog(String name, String breed)
function Dog(name, breed)
{
        // think Dog: base(name)
        Pet.call(this, name);
        this.getBreed = function()
        {
                return breed;
        }
        
        // Breed doesn't change, obviously! It's read only.
        // this.setBreed = function(newBreed){breed = newBreed;}
}

// this makes Dog.prototype inherits from Pet.prototype
Dog.prototype = new Pet();

// remember that Pet.prototype.constructor
// point to Pet. We want out Dog instances' constructor
// to point to Dog.
Dog.prototype.constructor = Dog;

// Now we override Pet.prototype.toString
Dog.prototype.toString = function()
{
        return "This dog's name is: " + this.getName() + " , and its breed " +
        "is: " + this.getBreed();
};
//end of class Dog

var dog = new Dog("Buddy", "Greed Dane");
// test the new toStirng()
alert(dog);

// Testing instanceof (similar to the is operator)
// (dog is Dog)? yes
alert(dog instanceof Dog);
// (dog is Pet)? yes
alert(dog instanceof Pet);
// (dog is Object)? yes
alert(dog instanceof Object);

 所使用的原型 — 替换技巧正确设置了原型链,因此假如使用C#,测试的实例将按预期运行。而且特权方法仍然会按预期运行。

下一节:模拟命名空间

  • 大小: 21.1 KB
分享到:
评论

相关推荐

    JavaScript中的类继承

    在JavaScript中,对象可以直接从其他对象继承属性和方法,而不是通过类的实例化。这种继承机制使得JavaScript具有更强的表现力和灵活性,尤其在代码复用和类型安全方面。 类型安全和代码复用是类继承的主要原因。在...

    javascript 原生态js类继承实现的方式

    我们还知道,面向对象编程有三个重要的概念 - 封装、继承和多态。 但是在JavaScript的世界中,所有的这一切特性似乎都不存在。 因为JavaScript本身不是面向对象的语言,而是基于对象的语言。

    JavaScript继承

    通过继承,可以在已有类的基础上扩展功能,而不是从零开始编写代码。当需要修改共享的方法时,只需要在一个地方进行,提高了代码维护性。例如,如果多个类都需要`toString`方法,可以通过创建一个基础类,然后让这些...

    JavaScript中的继承之类继承_.docx

    ### JavaScript中的继承——类继承 #### 一、引言 JavaScript是一种动态的、弱类型的编程语言,它支持面向对象编程模式。与传统的面向对象语言如Java或C#不同,JavaScript的继承模型基于原型,这使得它的继承机制...

    Javascript编程 类的继承及封装:Class

    笔者历经多年javascript的开发,痛彻体会javascript面向对象编程的不便性,精心制作了一个类的定义与继承功能的js,实现了在javascript中对类的定义、继承、封装机制,主要功能特征包括:  一、 统一了类定义的语法...

    JavaScript学习之三 — JavaScript实现继承的7种方式

    本篇文章将深入探讨JavaScript实现继承的七种常见方式,帮助你更好地理解和运用这一概念。 1. 原型链继承(Prototype Chain Inheritance) 原型链是JavaScript实现继承的基础。每个函数都有一个`prototype`属性,这...

    javascript控件开发之继承关系

    在这个主题中,“javascript控件开发之继承关系”主要探讨的是如何利用JavaScript的面向对象特性来构建和组织控件的层次结构,以及如何通过继承来实现代码的复用和模块化。 在JavaScript中,继承是基于原型...

    javascript的prototype继承

    JavaScript的原型继承是其面向对象编程的一大特性,它基于原型链机制实现,允许一个对象可以从另一个对象继承属性和方法。这种继承方式不同于类继承,而是通过将子类的原型对象设置为父类的一个实例来实现。 在...

    Javascript类的继承,使用this.callParent调用超类方法

    在本话题中,我们将深入探讨JavaScript中的类继承,并特别关注`this.callParent`这个方法,它是如何被用来调用超类方法的。 首先,让我们了解JavaScript中的构造函数。构造函数是一种特殊的函数,用于创建和初始化...

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

    在JavaScript中,类和继承是面向对象编程的重要概念。JavaScript是一种动态类型的语言,它没有像Java或C++那样的传统类,而是使用函数作为构造器来模拟类的行为,并通过原型链实现继承。本文将深入探讨JavaScript中...

    javascript 五种继承

    javascript 五种继承简介。

    JavaScript面向对象继承详解

    6. **ES6的类继承**:ES6引入了`class`语法糖,使得JavaScript的继承看起来更像传统的面向对象语言。实际上,`class`和`extends`关键字仍然基于原型链,但提供了更简洁的语法。 在JavaScript中,还有其他一些与继承...

    JavaScript实现继承的几种方式

    继承是面向对象的核心特性之一,它允许一个对象(子类)从另一个对象(父类)获取属性和方法,从而形成类之间的层次结构。本篇文章将深入探讨JavaScript中实现继承的几种常见方式。 1. 原型链继承 JavaScript的原型...

    javascript继承之为什么要继承.docx

    例如,我们可以创建一个 Animal 类,并在其 prototype 中添加一个 walk 方法,然后创建一个 Dog 类,并让它继承 Animal 类,这样 Dog 类就自动继承了 Animal 类中的 walk 方法。 然而,在 JavaScript 中,继承机制...

    javascript 继承派生

    在JavaScript中,由于它没有内置的类结构,而是采用原型(prototype)链来实现继承。当一个对象作为另一个对象的原型时,后者就能访问前者的属性和方法。 **派生**,或称为子类化,是指创建一个新类(子类),该类...

    js javascript zInherit 对象 继承

    对象继承允许一个对象(子对象)从另一个对象(父对象或基对象)那里获取属性和方法,从而实现代码的复用和组织。`zInherit`是JavaScript中一种常见的对象继承实现方式。 在JavaScript中,有多种实现继承的方法,...

    javaScript类继承经典资料

    继承是面向对象开发的又一个重要概念,它可以将现实生活的概念对应到程序逻辑中。...在JavaScript中没有专门的机制来实现类的继承,但可以通过拷贝一个类的prototype到另外一个类来实现继承等扥,看资料

    【温故而知新】JavaScript类、类继承、静态方法.md

    【温故而知新】JavaScript类、类继承、静态方法

Global site tag (gtag.js) - Google Analytics