欢迎光临
我们一直在努力

javascript设计模式与开发实践_pdf?javascript设计模式与开发实践_pdf下载?

继承的思想就好比中华千年文化留存是一样的,通过一年一年的传承,祖先一代一代地繁衍,才有了多姿多彩的今天。

JavaScript是如何实现继承,并不断完善迭代的呢?

接下来让我们一点一点,循序渐进地讲解,如果一代一代升级继承。

一:原型链继承

原理:利用__proto__指向父类的原型对象来实现链式继承

实现:

原型继承实现

缺点:有两个

其一,链式调用注定会出现共享问题,即子类实例化出来的父类是共享的,只要有其中一个子类改变了,则所有的其他子类也会改变

原型继承缺点一

其二,没法给父类传递初始化数据。

原型继承缺点二

既然原型继承有缺点,那根据达尔文的进化论,适者生存,看看我们如何一点点取其精华去其糟粕。

二:构造函数继承

原理:在子类中通过使用call,bind等来改变函数的作用环境,就可以解决原型链的两个缺点。当然call或者bind其实就是在子类中的变量在父类中执行了一遍。

实现:

构造函数继承

缺点:该继承虽然解决了链式继承的共享属性和没法传递参数的问题。但也带来了一个问题,即没有链式继承的优点,即没法得到父类的父类,就是爷爷辈的优良传统。这不是忘祖吗?会被骂的啊。那该如何解决这个问题呢?

三:组合继承

原理:既然构造函数继承解决了链式继承的缺点,缺少链式继承的优点。那把他们两个组合起来是不是就能解决这个问题了?

实现:

组合继承实现

到此,难道这就是最优的继承方式了吗?难道必有比它更好地继承了吗?

缺点:组合继承调用了两遍父类构造函数。

四:寄生组合式继承

原理:利用构造函数继承和原型式继承,依托于原型prototype创建一个对象,同时又可以拓展新对象来实现。

实现:

寄生组合实现

在详细解读一下:首先由于构造函数继承已经执行了一遍父构造函数方法,我们只是需要父类原型对象的属性和它原型的内容(就是解决构造函数中的缺点,我想要你的属性和你祖祖辈辈的好东西,但我又不想在执行一遍你的方法)。所以才会出现,直指要害,既然你要我的prototype上的东西,那我就拷贝一份给你,通过inheritObject方法得到爷爷辈的属性内容,再将爷爷认的儿子砍掉,直接认孙子(爷爷的constructor指向孙子,孙子的prototype也指向爷爷)。

到此javaScript中的继承就梳理完成,之所以要补充一篇继承再里面,是后面的设计模式中会使用一部分继承方法,这里讲解一遍。

流程线下

原型链继承

构造函数继承

组合继承

寄生组合式继承

多多关注一下,后面真的要开始以故事的形式讲解设计模式了

赞(0)
未经允许不得转载:模式牛 » javascript设计模式与开发实践_pdf?javascript设计模式与开发实践_pdf下载?
分享到: 更多 (0)