子承父业
该方法利用了call,apply,按照原有的方式进行复制,做一些改进,最后进行事务处理。废话不多说,直接看例子。
在这里我提一下,call和apply的异同:它们两个都可以改变this指向,而且接受的第一个参数都是this需要指向的对象它们的区别就在于传入的参数形式不同。call接受一串参数需要逐一列出来,apply接受一个参数数组。具体代码我就不赘述了。
原型链继承
把我的使用权限给你,你可以直接拿去用,减少资源浪费。
解释一下代码:先创建一个原始的对象fn1,然后给它的原型添加属性和方法。再创建一个对象fn2准备继承fn1。将fn2的原型赋值为一个指针,指向fn1。最后执行fn2.name获取继承过来的属性。
混合继承
我们先来看一个错误的例子。
运行出来的结果与我设想的不太一样。原来是Father的show方法被修改了,变的跟Son一样。可是不利用原型去继承,Son又怎么继承到Father身上的方法呢?那只有一种可能了,我们原型继承使用的方法不对!
接下来看一下正确的写法:
代码修改之处就是使用了for-in循环,遍历Father的原型依次拷贝给Son的原型,这种方式称为深拷贝。(浅拷贝以及深拷贝后续再详细写)