关于JS中的继承(二)

来源:互联网 发布:数据库 substring 编辑:程序博客网 时间:2024/05/29 15:29

JS中的call继承

在子类的构造体中,把父类当做普通方法执行,让父类方法中的this指向子类的实例。

call继承的原理
把父类构造体中私有的属性和方法,原封不动复制了一份给子类的实例(继承完成后,子类和父类是没关系的)。

call继承的细节
我们一般把call继承放在子类构造体中的第一行,也就是创建子类实例的时候,进来的第一件事情就是先继承,然后再给实例赋值自己私有的(好处:自己的可以把继承过来的结果替换掉)

function Parent() {    this.x = 100;}Parent.prototype.getX = function () {    console.log(this.x);};function Children() {    //=>this:child 子类的实例    Parent.call(this);//=>让Parent执行,方法中的THIS依然是子类的实例(在父类构造体中写的 THIS.XXX=XXX 都相当于在给子类的实例增加一些私有的属性和方法,相当于给children的实例child增加了一些私有的属性和方法)    this.y = 200;}var child = new Children();

寄生组合继承

首先介绍一下:Object.create([obj]):创建一个空对象(实例),把[obj]作为新创建对象的原型

var obj={name:'李义超'};var newObj=Object.create(obj);newObj.__proto__===obj

然后再利用call继承就实现了寄生组合继承
在寄生组合继承中,实现了一个比较不错的需求:

function Parent() {    this.x = 100;}Parent.prototype.getX = function () {    console.log(this.x);};function Children() {    Parent.call(this);    this.y = 200;}Children.prototype = Object.create(Parent.prototype);Children.prototype.constructor = Children;Children.prototype.getY = function () {    console.log(this.y);};

这里写图片描述