手机版

论JS继承_寄生继承寄生组合继承

时间:2021-09-07 来源:互联网 编辑:宝哥软件园 浏览:

5.寄生遗传

类似于寄生构造函数和工厂模式,创建一个只封装继承过程的函数,它以某种方式在内部增强对象,最后返回对象。

函数createAnother(原始){ var clone=Object.create(原始);//创建新的对象克隆。sayhi=function()通过调用函数{//以某种方式增强此对象警报(‘Hi’);};返回克隆;//返回此对象} var person={name:' bob ',friends 3360[' shelby ',' court ',' van ']};var other person=create other(person);另一个人。sayHi();在上面的示例中,createAnother函数接收一个参数,该参数是将作为新对象基础的对象。

另一个人是在人的基础上创造出来的一个新的对象,它不仅具有人的所有属性和方法,而且有自己的sayHi()方法。

6.寄生组合遗传

组合继承是js最常用的继承方式。组合继承最大的问题是构造函数在任何情况下都会被调用两次:一次是在创建子类型原型时,另一次是在子类型构造函数内部。

函数SuperType(name){ this . name=name;this.colors=['red ',' blue ',' green '];} SuperType . prototype . SayName=function(){ alert(this . name);}function SubType(姓名、年龄){ SuperType.call(this,姓名);//第二次调用SuperType(). age=age;} subtype . prototype=new SuperType();//调用supertype()子类型。原型。话说=function () {alert(这个。年龄)第一次;}

第一次调用SuperType构造函数时,SubType.prototype会得到两个属性:名称和颜色;它们都是SuperType的实例属性,但是现在它们在SuperType的原型中。

当调用SubType构造函数时,将再次调用SubType构造函数,这一次将在新对象上创建实例属性名称和颜色。

因此,这两个属性屏蔽了原型中具有相同名称的两个属性。

寄生组合遗传就是为了解决这个问题。

通过借用构造函数继承属性;

通过原型链继承方法。

不需要调用超类型的构造函数来指定子类型的原型。

函数inheritPrototype(subType,super type){ var protoType=object . create(super type . protoType);//Create object prototype . constructor=subType;//增强对象subType.prototype=protoType//指定对象}函数超类型(名称){this。name=namethis.colors=['red ',' blue ',' green '];} SuperType . prototype . SayName=function(){ alert(this . name);}function SubType(姓名、年龄){ SuperType.call(this,姓名);//第二次调用SuperType(). age=age;}inheritPrototype(SubType,SuperType)SubType . prototype . Sayage=function(){ alert(this . age);}var实例=new SubType('Bob ',18);instance . SayName();instance . SayAge();inheritPrototype函数接收两个参数:子类型构造函数和超类型构造函数。

1.创建超类型原型的副本。

2.将构造函数属性添加到创建的副本中,以弥补由于重写原型而丢失的默认构造函数属性

3.将新创建的对象(即副本)分配给子类型的原型。这个方法只调用SuperType构造函数一次,instanceof和isPrototypeOf()可以正常使用。

以上关于JS继承_寄生继承寄生组合继承的文章都是边肖跟大家分享的内容,希望能给大家一个参考,多支持我们。

版权声明:论JS继承_寄生继承寄生组合继承是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。