首页 > 网站 > WEB开发 > 正文

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

2024-04-27 14:21:16
字体:
来源:转载
供稿:网友
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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表