您的位置:首页 > Web前端 > JavaScript

JavaScript中类的继承有哪些方法(组合继承进阶)

2017-12-05 20:15 369 查看
在JavaScript 里,被继承的函数称为超类型(父类,基类也行,其他语言叫法),继承的

函数称为子类型(子类,派生类)。继承也有之前问题,比如字面量重写原型会中断关系,使

用引用类型的原型,并且子类型还无法给超类型传递参数。

为了解决引用共享和超类型无法传参的问题,我们采用一种叫借用构造函数的技术,或

者成为对象冒充(伪造对象、经典继承)的技术来解决这两种问题。

function aObj(){
this.name = ['小红','小强'];
}
}
aObj.prototype.showname = ()=>{
alert(this.name)
}

function bObj(){
aObj.call(this);  //只针对构造函数本身的继承  还需要继承原型
}


借用构造函数虽然解决了函数本身的继承,但没有继承原型链。所以,我们需要原型链+借用构造函数的模式,这种模式称为组合继承。

方法一:

bObj.prototype = aObj.prototype;


缺点:引用类型,在操作对象原型时候,直接改变堆内存中对象的方法

方法二:

bObj.prototype = new aObj();


这种继承借助原型并基于已有的对象创建新对象,同时还不必因此创建自定义类型,但是构造函数两次继承,不是很好

方法三:

bObj.prototype = Object.create(aObj.prototype);
bObj.prototype.constructor = bObj


使用a原型对象及其属性去创建一个新的对象,并将这个对象的constructor指向B函数本身,不存在重复继承的问题

方法四:

for (var i in aObj.prototype) {
bObj.prototype[i] = aObj.prototype[i];
}


将a的原型链遍历给b对象,实现原型的深度拷贝,双方互不影响
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐