Javascript - 继承 Inheritance

继承关系

 

/*
    Java:
    1. Instance fields
    2. Instance methods
    3. Class fields
    4. Class methods

    Javascript:
    1. Constructor object => class methods and class fields 
    2. Prototype object => instance methods
    3. Instance object => instance fields
*/
    // 定义Person类
    function Person(pname) {
        this.pname = pname;
    };
    Person.prototype.speak = function () {
        console.log(this.pname + " is speaking...");
    };

    Person.prototype.walk = function () {
        var ts = typeof (this).toString();
        console.log(this.pname + " is walking...");
    };

    // 定义Student类继承自Person
    function Student(pname) {
        Person.call(this, pname);
    };
    // 修改Student的prototype
    Student.prototype = Object.create(Person.prototype);
    // 修改Student的prototype的constructor
    Object.defineProperty(Student.prototype, 'constructor',
    {
        value: Student,
        enumerable: false,
        writable: true
    });
    // 增加一个方法
    Student.prototype.study = function () {
        var ts = typeof (this).toString();
        console.log(this.pname + " is studying...");
    };

    var aStudent = new Student("Chris");
    aStudent.speak();
    aStudent.walk();
    aStudent.study();

    // 定义Teacher类继承自Person
    function Teacher(pname) {
        Person.call(this, pname);
    };
    Teacher.prototype = Object.create(Person.prototype);
    Teacher.prototype.constructor = Teacher;
    Teacher.prototype.teach = function () {
        var ts = typeof (this).toString();
        console.log(this.pname + " is teaching...");
    };

    var aTeacher = new Teacher("Stella");
    aTeacher.speak();
    aTeacher.walk();
    aTeacher.teach();

enjoy.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
原型继承(Prototype Inheritance)和经典继承(Classical Inheritance)是两种不同的继承方式,用于在 JavaScript 中实现对象之间的继承关系。 1. 原型继承- 在原型继承中,每个对象都有一个指向其原型的链接。当我们访问对象的属性或方法时,如果对象本身没有该属性或方法,JavaScript 引擎会沿着原型链向上查找,直到找到该属性或方法。 - 原型继承使用 `prototype` 属性来建立对象之间的继承关系。通过将一个对象设置为另一个对象的原型,后者将继承前者的属性和方法。 - 这种继承方式在 JavaScript 中是默认的,所有的对象都直接或间接地继承自 `Object.prototype`。 2. 经典继承- 经典继承是一种基于类的继承方式,它通过定义类和创建类的实例来实现对象之间的继承关系。 - 在经典继承中,类可以有构造函数、实例方法和静态方法。实例通过实例化类来创建,并且可以访问类的属性和方法。 - 经典继承使用 `extends` 关键字来创建子类,并使用 `super` 关键字来调用父类的构造函数。 区别: - 语法:原型继承使用原型链和 `prototype` 属性来实现继承,而经典继承使用类和实例化来实现继承- 类的定义:原型继承中没有类的概念,只有对象和原型的概念。经典继承中使用类来定义对象的结构和行为。 - 构造函数:原型继承中没有明确的构造函数的概念,而经典继承通过类的构造函数来创建对象。 - 继承方式:原型继承是通过原型链来继承属性和方法,子对象直接继承父对象的原型。经典继承是通过创建类的实例来继承属性和方法,子类通过实例化父类来继承父类的属性和方法。 需要注意的是,虽然 JavaScript 中原型继承是默认和常见的方式,但 ES6 引入的 `class` 关键字使得经典继承也成为了一种在 JavaScript 中实现继承关系的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值