转载:https://segmentfault.com/a/1190000002440502
还有一个里边有js的采用临时方法的继承 http://javapolo.iteye.com/blog/1996871
我们用 类式继承继承 无参的构造函数 原型链继承,缺点(如果字面量重写原型中断关系,2,子类无法给超类传参)
借用构造函数,有参的构造函数。(可以传参,没有prototype不能说继承)
原型链+借用构造函数的模式,这种模式称为组合继承,有参的构造函数。
组合式继承是比较常用的一种继承方法,其背后的思路是 使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又保证每个实例都有它自己的属性。 原型方法比对象方法和类型方法的高级就是复用。
原型式继承 原型式继承首先在obj()函数内部创建一个临时性的构造函数 ,然后将传入的对象作为这个构造函数的原型,最后返回这个临时类型的一个新实例。 缺点:不同的对象基本类型会重置,但是类似于数组就会保留。 寄生式继承 这种继承方式是把原型式+工厂模式结合起来,目的是为了封装创建的过程。 组合式继承的小问题 组合式继承是js最常用的继承模式,但组合继承的超类型在使用过程中会被调用两次;一次是创建子类型的时候,另一次是在子类型构造函数的内部。
var baseClass = function(){ this.name=‘yanjinyun‘; this.age = 11; this.arr=[‘a‘,‘b‘,‘c‘]; this.run=function(){ alert(this.age); } this.add=function(){ this.age++; } this.arrPush=function(){ this.arr.push(‘d‘); } } /* var b1=new baseClass(); b1.run(); var b2=new baseClass(); b2.run(); */ var sonClass=function(){ } sonClass.prototype=new baseClass(); s1=new sonClass(); s1.add(); s1.arrPush(); s1.run();//12 alert(s1.arr);//abcd s2=new sonClass(); s2.run();//11 alert(s1.arr);//abcd 在没有push的情况下出来的是abcd
一些问题:
为什么对象可以调用原型方法,js中的new 到底做了一件什么样的事情,类.prototype的本质就是一个对象,为什么new了之后我们的对象就可以调用原型方法。
时间: 2024-10-10 02:05:01