javascript 继承的几种方法

假如我这里有以下两个构造函数:

苹果是果蔬的一种,如何能让apple继承果蔬的属性呢,因为每次都重复创建新的属性效率不高,于是想到了继承,在es6之前,继承要花不少功夫。

一、使用构造函数的call和apply方法:

在一个子构造函数中,可以通过调用父构造函数的call方法或appaly方法来实现继承,类似于Java中的写法。 

但是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组。

二、原型链的方法-----prototype模式 

这是 在Fruit 的原型链上定义了species 属性,然后apple1 跳过了Apple,直接继承了Fruit的属性,但是这样会出现一个后果:

 从控制台的输出结果可以看到: Fruit.prototype 和 Apple.prototype 都指向了同一个对象,对Apple 对象的修改都反映到了Fruit上了。因此Fruit 的constructor 属性也变为了 f Apple(  ) { } ;但是比第一种方法节省内存.

对上面的缺点进行改进,就是创建一个空对象作为中介来继承Fruit 的prototype ,然后 Apple 的prototype 指向空对象的实例,而空对象的原型继承自Fruit ,就间接完成了继承。

三、对象属性拷贝完成继承 

创建了一个函数,把那些不变的属性放在原型链上,然后把这些属性拷贝到新的对象 中就可继承到Fruit 的全部在原型链上的属性。

四、es6中用extend 关键字进行类继承,原型会自动调整,通过调用super( ) 方法访问基类的构造函数。

待补充。。。。。。 

猜你喜欢

转载自blog.csdn.net/Jackshijin/article/details/84196388