继承

什么是继承

从常识认知的角度讲,什么叫做继承?

首先看一个没有关系的,比如猫和狗

我们看下图,猫和狗本质是不是一类,虽然有一些属性是相交的,但是我们也说本质是没有任何关系的

什么是有关系的?

比如人和学生

人的属性学生都有,人能做的事情,学生也都能做。

学生有自己的特有属性,不是所有人都有,所以学生能做的事情,人不一定都能做

我们可以认为:

学生“更精细化、更具体,更精分”了人类。

学生的比例实际要比人类少的多

学生一定是人,但是人不是学生

 

继承的实现

从编程的角度讲。学生类“继承了”人类,人类叫做学生类的“超类”,学生类叫做“子类”

 // 人类
    function People(name, age, sex) {
      this.name = name;
      this.age = age;
      this.sex = sex;
    }
    People.prototype.sayHello = function () {
      console.log("你好,我是" + this.name)
    }
    //  下面的代码就是继承的核心代码
    Student.prototype = new People()
    // 学生类
    function Student(name, age, sex,) {
      this.name = name;
      this.age = age;
      this.sex = sex;
    }
    Student.prototype.study = function () {
      console.log(this.name + "正在学习")
    }
    var xiaoming = new Student("小明", 12, '')
    xiaoming.study()
    xiaoming.sayHello()

 

执行机理看下图

 

 

首先我们知道实例__proto__指向的是构造函数的prototype,此时我们强行将Student的prototype执向了People的实例,所以此时xiaoming的__proto__指向的就是People的实例

 

posted @ 2022-01-05 20:38  keyeking  阅读(61)  评论(0编辑  收藏  举报