Js 继承

javaScript 继承,我们也许要有好多方式,比如说原型链继承,构造继承,实例继承、组合继承、但是我们必须要理解的,继承的实质到底是什么,继承实质其实就是原型链之间转化,每个构造函数的声明,不可能总要开辟新的空间,因此我们都是在原型对象基础上做修改。下面这张图,我们能否理解:

Js 继承_第1张图片
简单截图

通过截图我们可以看出,构造函数通过prototype 指向原型对象,我们的实例化得到的函数指向了构造函数的prototype,这样也就是new 出来的函数指向了原型对象,所以所有的指向都会是原型对象。而作为原型对象,它通过constructor来区别谁引用了它。这就是一层原型链。

说了这么多都在介绍原型链,步入正题继承:第一种方式继承:

Js 继承_第2张图片
call继承

这中方式简单继承原型上基本值可以继承,但是在原型函数上的方法是不能继承的,那么如若只是使用prototype来改变原型对象,那么也会出现一个问题,我们每次新实例化出来的值都会被修改,因此合并两者修改成以下方式。

Js 继承_第3张图片
综合方式继承

这种方式来说会好好多,我们可以实现基本继承,又可以解决原型对象被修改,但是我们可以看出,这里其实可以将 new parents() 直接改成 parents.prototype,我们根据原型链指向,这时我们还有一个问题就是,我们实例化出来的child1 它的prototype 指向的并不是它自己而是 parents 的prototype,因此我们此时的修改就是使用Object.create(parents.prototype) 方式,此时的继承将会趋近完美。

此次的继承写得有些粗糙,如果有什么不对的地方,希望大家指出,欢迎评论。

你可能感兴趣的:(Js 继承)