继承
什么是继承
从常识认知的角度讲,什么叫做继承?
首先看一个没有关系的,比如猫和狗
我们看下图,猫和狗本质是不是一类,虽然有一些属性是相交的,但是我们也说本质是没有任何关系的
什么是有关系的?
比如人和学生
人的属性学生都有,人能做的事情,学生也都能做。
学生有自己的特有属性,不是所有人都有,所以学生能做的事情,人不一定都能做
我们可以认为:
学生“更精细化、更具体,更精分”了人类。
学生的比例实际要比人类少的多
学生一定是人,但是人不是学生
继承的实现
从编程的角度讲。学生类“继承了”人类,人类叫做学生类的“超类”,学生类叫做“子类”
// 人类 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的实例