原型链继承: 原理:将父类的实例作为子类的原型

简介: 原型链继承: 原理:将父类的实例作为子类的原型
function Father(){
        this.age=10
        this.phone={
          first:"华为",
          second:"小米"
        }
      }
      Father.prototype.getage=function(){
        return this.age
      }
      function Son(name,money){
        this.name=name
        this.money=money
      }
      Son.prototype=new Father() //子类型的原型为父类型的一个实例对象
      Son.prototype.constructor=Son //让子类型的原型的constructor指向子类型
      Son.prototype.getmoney=function(){
        return this.money
      }
      var son=new Son("小米",1000)//
      var son2=new Son()
      console.log(son.age)//10
      console.log(son.getage())//10
      console.log(son.name)//小米
      console.log(son.getmoney())//1000
      console.log(son instanceof Son)//true
      console.log(son instanceof Father)//true
      son.phone.first="魅族"//更改一个子类的引用属性,其他子类也会受影响
      console.log(son2.phone.first)//魅族

 

 优点:1.通过子类实例可以直接访问父类原型链上和实例上的成员

                     2.  相对简单

          缺点:1.创建子类实例时,无法向父类构造函数传参

                     2.父类的所有引用属性会被所有子类共享,更改一个子类的引用属性,其他子类也会受影响

二.构造函数继承:

      原理:在子类构造函数中调用父类构造函数,可以在子类构造函数中使用call()和apply()方  法改变this指向

function Father(name,age){
        this.name=name
        this.age={age:age}
      }
      Father.prototype.getname=function(){
        return this.name
      }
      function Son(name,age,money){
        Father.call(this,name,age)//修改Father的this
        this.money=money
      }
      Son.prototype.getmoney=function(){
        return this.money
      }
      var son=new Son("小明",12,1000)
      var son2=new Son("小李",11,999)
      console.log(son.name)//小明
      console.log(son.getname())//报错 无法继承父类原型上的属性与方法
      console.log(son.money)//1000
      console.log(son.getmoney())//1000
      console.log(son instanceof Father)//false
      console.log(son instanceof Son)//true
      console.log(son.age.age)//12
      console.log(son2.age.age)//11 父类的引用属性不会被共享

 

   优点:1.可以在子类实例中直接向父类构造函数传参

                  2.父类的引用属性不会被子类共享

       缺点:1.无法继承父类原型上的属性与方法

相关文章
|
8月前
|
设计模式 Java 编译器
面向对象编程中的继承与多态:深入理解父类引用指向子类实例
面向对象编程中的继承与多态:深入理解父类引用指向子类实例
用原型链的方式写一个类和子类
用原型链的方式写一个类和子类
38 0
C# 继承类中(父类与子类)构造函数的调用顺序
C# 继承类中(父类与子类)构造函数的调用顺序
|
5月前
|
存储 Java 程序员
08 Java面向对象基础(对象与类+实例变量与方法+构造方法+this关键字)
08 Java面向对象基础(对象与类+实例变量与方法+构造方法+this关键字)
90 4
继承之原型链继承
继承之原型链继承
59 0
|
8月前
|
JavaScript 前端开发
js继承的超详细讲解:原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承、class继承
js继承的超详细讲解:原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承、class继承
160 0
|
8月前
|
设计模式 前端开发 JavaScript
【面试题】 对象、原型、原型链与继承?这次我懂了!
【面试题】 对象、原型、原型链与继承?这次我懂了!
|
8月前
|
Java 编译器
【JAVA面向对象编程】--- 探索子类如何继承父类
【JAVA面向对象编程】--- 探索子类如何继承父类
45 0
|
8月前
|
设计模式 前端开发 JavaScript
【面试题】对象、原型、原型链与继承 ,你了解多少?
【面试题】对象、原型、原型链与继承 ,你了解多少?
|
前端开发 JavaScript
原型、原型链和继承~我终于搞定了啊~~
不管是在学习JavaScript,还是面试找工作,逃不过去的就是原型、原型链和继承这几个重点和难点;对于这些内容的掌握还是很有必要的。
118 0
原型、原型链和继承~我终于搞定了啊~~