面向对象的继承

  谈到面向对象,不得不说一下他的继承,这也是对象三大特征之一

  我们常说面向对象是初级前端和中级前端的分水岭,如何熟练的掌握面向对象,称为中级前端呢?

  接下来就是重要的一环了: 6大继承

  克隆对象:

    var obj={

      name:"zhang"

    }

    var obj2=obj  这种写法不是对象克隆(只是把obj的内存地址赋值给obj2)

    克隆写法(通过for in 克隆       (有一大特性:不管是公有的还是私有的,都会克隆成私有的))

    案例:

      var obj={

        name:"zhang",

        age:20

      }

      var obj2={}

      for(var key in obj){

        obj2[key]=obj[key]

      }

      console.log(obj2)

      通过这种方法就能得到obj的所有属性了;

  除此之外,js也提供了一个克隆的方法   :Object.create()

  案例:

    var obj={

      name:"zhang",

      age:20

    }

    var obj2=Object.create(obj)   将obj的所有属性克隆到obj2的原型上

    console.log(obj2)

     如果想obj2添加私有属性:var obj2=Object.create(obj,{name:{value:"lisi"}})

  这种写法得到最后的结果

  obj2=name:"lisi"

  __proto__:{name:"zhang",age:20}

  对象的继承:

  1.原型的继承:将父类的私有和公有的继承在子类的原型上,成为子类的公有的;

  案例:

  function A(){

    this.name="zhang"

  }

  A.prototype.s=10;

  function B(){

    this.age=20;

  }

  B.prototype=new A;

  var b=new B;

  console.log(b)

  2.call继承:将父类的私有的继承为子类的私有的

  案例:

  function A(){

    this.name="zhang"

  }

  A.prototype.s=20;

  function B(){

    this.age=10;

    A.call(this)

  }

  B.prototype.y=11;

  var b=new B;

  console.log(b)

  3.冒充对象的继承:将父类的私有的和公有的都继承为私有的;

  案例:

  function A(){

    this.name="zhang"

  }

  A.prototype.s=10;

  function B(){

    this.age=40;

    var a=new A;

    for(var key in a){

      this[key]=a[key]

    }

    a=null;

  }

  B.prototype.y=20

  var b=new B;

  console.log(b)

  4.混合继承:父类私有的继承为子类私有的,父类私有的,公有的继承为子类公有的;

  案例:

  function A(){

    this.name="zhang"

  }

  A.prototype.s=41;

  function B(){

    this.age=10;

    A.call(this)    

   }

  B.prototype=new A;

  var b=new B;

  console.log(b)

  5.组合继承 :父类私有的继承为子类私有的,父类公有的继承为子类公有的

  案例:

  function A(){

    this.name="zhang"

  }

  A.prototype.s=10;

  function B(){

    this.age=20;

    A.call(this)

  }

  B.prototype=Object.create(A.prototype)

  var b=new B;

  console.log(b)

  6.中间类继承

  案例:

    function fn(){

      arguments.__proto__=Array.prototype

      arguments.shift

      console.log(arguments)

    fn(12,25,98)

    argument不是一个数组,没有Array自带的那些方法,现在我们想arguments有array的那些方法,将arguments的原型执行array内置类的原型

原文地址:https://www.cnblogs.com/shangjun6/p/10218943.html