首页 > 代码库 > 面向对象的三大特性之继承-基础知识总结------彭记(05)

面向对象的三大特性之继承-基础知识总结------彭记(05)

面向对象的三大特性之继承:

js中的某些对象没有一些需要的属性和方法,但是另外的对象有,那么拿过使用,就是继承。

js中继承的实现方式:

1.混入式继承:通过循环将一个对象中的所有属性和方法混入到另外一个对象中:

var me={

  work:function(){

  console.log(‘敲代码‘);

  }

};

var mayun={

  money:9999999,

  car:‘000‘,

  manager:function(){

    console.log(‘管理巴巴。。。‘);

   }

}

/*遍历,让me对象拥有mayun对象的所有属性*/

for(var key in mayun){

  me[key]=mayuan[key];

}

console.log(me);

2.使用原型实现继承:

function Person(){

  this.name=‘jack‘;

  this.age=‘20‘;

  this.sayHi=function(){

    console.log(‘大家好‘);

  }

}

function Painter(){

  this.name=‘lose‘;

  this.age=‘19‘;

  this.canPaint=function(){

    console.log(‘画画‘);

  }

}

var per=new Person();

var paint=new Painter();

function Student(){

}

/*修改构造函数的protoType属性来设置原型,但是原型只有一个,所以这种方式无法指定多种原型,后面指定的原型会覆盖前面指定的原型*/

/*Student.prototype=per;

var stu=new Student();

console.log(stu);*/

/*利用混入的方式给原型添加属性和方法*/

for(var key in per ){

  Student.prototype[key]=per[key];

}

for(var key in paint){

  Student.prototype[key]=paint[key];

}

var stu=new Student();

console.log(stu);

3.经典的实现继承方式:

 var laoWang={

  company:‘wangda‘,

  money:100000000,

  sayHi:function(){

    console.log(‘我有钱‘+this.name);

  }

}

/*经典继承方式*/

var obj=Object.create(laoWang);

console.log(obj);

/*解决经典继承的兼容性问题*/

function createObj(obj){

  if(Object.create){

    var newObj=Object.crate(obj);

  }else{

      var newObj={};

      for(var key in obj){

       newObj[key]=obj[key];

      }

    }

    return newObj;

}

var obj =createObj(laoWang);

console.log(obj);

面向对象的三大特性之继承-基础知识总结------彭记(05)