读javascript高级程序设计06-面向对象之继承

王朝学院·作者佚名  2016-05-23
窄屏简体版  字體: 小  |  中  |  大  |  超大  

读javascript高级程序设计06-面向对象之继承原型链是实现继承的主要方法,通过原型能让一个引用类型继承另一个引用类型。

1.原型链实现继承 function SuperType(){this.superPRop=1;}SuperType.prototype={ showSuperprop:function(){ console.log(this.superprop); }}function SubType(){this.subprop=2;}SubType.prototype=new SuperType();SubType.prototype.showSubprop=function(){ console.log(this.subprop);}var s=new SuperType();s.showSuperprop();//1var s2=new SubType();s2.showSuperprop();//1s2.showSubprop();//2

注意:在使用原型链实现继承时,不能用对象字面量方法创建原型方法。

2.借用构造函数 在子类型构造函数内部调用超类型的构造函数。

function SuperType(){this.numbers=[1,2,3];}function SubType(){SuperType.apply(this);}var s=new SubType();s.numbers.push(4);console.log(s.numbers);//1,2,3,4var s1=new SubType();console.log(s1.numbers);//1,2,3

* 3.组合继承--原型链结合借用构造函数使用原型链实现对原型对象属性和方法的继承,使用构造函数实现对实例对象属性的继承。

function Person(name){ this.name=name; this.numbers=[1,2,3];}Person.prototype.sayName=function(){ console.log(this.name);}function Student(name,age){ Person.call(this,name);////第二次调用Person() this.age=age;}Student.prototype=new Person();//第一次调用Person()Student.prototype.sayAge=function(){ console.log(this.age);}var s=new Student('小张',15);s.sayName();//小张s.sayAge();//15s.numbers.push(5);console.log(s.numbers);//[1, 2, 3, 5]var s1=new Student('小兰',14);s1.sayName();//小兰s1.sayAge();//14console.log(s1.numbers);//[1, 2, 3]

组合继承是很常用的继承方式,但是它也有个缺点,就是需要调用两次超类型的构造函数。

*4.寄生式组合式继承寄生组合式继承:借用构造函数继承属性,使用原型链的混合型式继承方法。寄生组合式是实现继承的最佳方式。

function object(o) { function F() { } F.prototype = o; return new F();}function inheritPrototype(superType, subType) { var prototype = object(superType.prototype); prototype.constructor = subType; subType.prototype = prototype;}function superType(name) { this.name = name;}superType.prototype.sayName = function () { console.log('my name is ' + this.name);}function subType(name, age) { superType.call(this, name); this.age = age;}inheritPrototype(superType, subType);subType.prototype.sayAge = function () { console.log('my age is ' + this.age);}var s=new superType('Cathy');s.sayName();//my name is Cathyvar s1 = new subType('Tom', 18);s1.sayName();//my name is Toms1.sayAge();//my age is 18

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航