js高级程序设计笔记14

2018-04-04  本文已影响0人  ycyc1996

继承

1.确定原型与实例的关系

a instacheof Object //true

2.借用构造函数继承

function SuperType(){
  ...
}

function SubType() {
  SuperType.call(this,a,b,c...);
  //在继承的类的构造函数中调用超类的构造方法,得到相同的实例属性
}
3.组合继承
function SuperType(){
  ...
}

function SubType(age) {
  SuperType.call(this,a,b,c...);
  ths.age = age
}
4.原型式继承
function object(o){
  function F(){}
  F.prototype = o;
  return new F();
}

var person = {
  name :  'Tom',
}

var a = object(person)

//ES5 var a = Object.create(person,{
  name: 'Petter',
})
5.寄生式继承
function createAnother(o){
  var o1 == object(o);
  o1.sayHi = function(){
    alert('  h i')
  }

  return o1;
}

//寄生式继承是对原型式继承的一种增强
6.组合寄生
function SubType(age){
  SuperType.call(this,a,b,c)
  this.age = age;
}
function inheritPrototype(subType,superType){
  var p = object(superType.prototype) //创建一份原型对象的副本
  p.constructor = SubType;
  SubType.prototype = p;
  //这样SubType()就指向了超类的一个副本,好处是只需要调用一次构造函数,无需创建额外的对象
  
}
上一篇下一篇

猜你喜欢

热点阅读