原型继承和类继承有什么区别?
Javascript 588
分析下原型继承和类继承。
类继承
JS中其实是没有类的概念的,所谓的类也是模拟出来的。特别是当我们是用new 关键字的时候,就使得“类”的概念就越像其他语言中的类了。类式继承是在函数对象内调用父类的构造函数,使得自身获得父类的方法和属性。call和 apply方法为类式继承提供了支持。通过改变this的作用环境,使得子类本身具有父类的各种属性
原型继承
原型构造对象是把现有的对象作为原型创建新的对象,被创建的对象继承的是原型对象的原型,即隐藏的属性_proto_,在浏览器中可以看见。每一个对象都有原型。原型是可以修改的。当一个对象需要调用某个方法时,它会去最近的原型上查找该方法,如果没有找到,它会再次往上继续查找。这样逐级查找,一直找到了要找的方法,或者没有此方法。 这些查找的原型构成了该对象的原型链,Object原型最后指向的是null。我们说的原型继承,就是将父对象的原型方法给子对象的原型。子类本身并不拥有这些方法和属性。
对比
和原型对比起来,构造函数(类)继承的方法都会存在父对象之中,每一次实例,都会将funciton保存在内存中,这样的做法毫无以为会带来性能上的问题。其次类式继承是不可变的。在运行时,无法修改或者添加新的方法。类式继承可以多重继承,调用多个构造函数即可,原型继承可以通过修改原型来修改子对象。