发表于: 2020-01-13 23:51:30

0 1429


今日完成的事

Js中的四大继承

 

类的几个特征封装,继承,多态

类的多态:

多态分为重载和重写

JAVA中的重载:函数名相同,但是传参类型,数量不同或者返回值不一样,这相当于把一个函数重载了

重写:子类重写父类的方法

Js中没有严格的重载,js中的重载是同一个方法根据传参不同,实现不同的业务逻辑。但是所有业务逻辑都要放在这个方法里面。

 

继承:子类继承父类中的属性和方法

后端中的继承:会把父类中的东西拷贝一份到子类上,子类可以修改继承过来的东西,并且不影响父类。

JS中的继承机制和其它后台语言是不一样的,有自己的独特处理方式。

继承方法1原型继承

假如有两个类AB,这两个类上的原型又有自己的方法,这时B想成为A的子类继承A身上原型的方法。

                                             

原型继承只需要让B的原型指向A的实例就可以了

这样b的实例通过__proto__找到A的实例,A的实例在通过__proto__找到A的原型,这样A的原型里面的方法B的实例就可以使用了

但是实例A里面的属性和方法会最为B类的原型里面的方法也会被实例B调用。

 

特点

1并不会把父类中的方法克隆一份给子类,而是建立了子类和父类之间的原型链查找机制,

2重定向子类的原型后默认丢失了原本的constructor属性(或者原本在原型上设置的属性和方法)

子类或者子类的实例可以基于原型链肆意父类上的属性和方法对父类造成一些不必要的破坏。

4会把父类中私有的属性方法变为公有的子类方法,父类中不管是公有还是私有的最后都会变为子类公有的。

继承方法2 Call继承

把父类当做普通函数执行,让其执行的时候,方法中的this指向子类实例

特点:

1.只能继承父类中的私有属性(继承的私有属性赋值给子类实例的私有属性),而且是类似拷贝过来一份,而不是链式查找

 2.因为只是把父类当做普通的方法执行,所以父类原型上的公有属性方法无法被继承过来

 

因为只是把父类当做普通的方法执行,所以父类原型上的公有属性方法无法被继承过来

寄生组合继承:CALL继承+变异版的原型继承共同完成的

CALL继承实现:私有到私有

         *   原型继承实现:公有到公有 

先用 Object.create(A.prototype);创建一个空对象,并把空对象的__proto__指向父类的原型,然后把子类的原型指向这个空对象,这样的话父类的私有属性就是实例的私有属性了,父类的公有属性就是就是子类的公有属性。

 

Class继承

Es6中创建类用class

 



返回列表 返回列表
评论

    分享到