ES6学习(8)原生继承

简介: ES6学习(8)原生继承

在es5中要实现继承,需要两个关键步骤:
①去继承构造函数中的成员,
②去继承原型对象上的成员。
对于去继承构造函数中的成员,我们可以借助apply或call方法,唯一的区别就是参数的不同,一个是数组,一个是单个传入。

1.父类(我们把方法定义在父类上,
这会造成,每次new实例的时候就会创建一个run方法,
放到原型对象上,就会去原型对象上找)
  function Animal(name, age){
   
     this.age = age;
     this.name = name;
     this.run = function () {
   
         console.log('run');
     }
  }
  2.创建一个Dog子类
  function Dog(name, age){
   
     Animal.call(this, name, age);
  }
3. 缺点:每次new一个dog实例,都需要调用Animal,效率下降

去继承原型对象中的方法

关键代码:Dog.prototype = Animal.prototype
通过这行代码我们可以去实现原型对象上的继承,
但是有一个缺点,就是无法实现个性化的继承。
也就是说如果我们往Dog.prototype上加一个成员,那么Animal的prototype上也会存在。
  1. 如果我们还是想实现Dog.prototype上添加而Animal上面不增加,应该如何做呢?
    需要借助一个中间夹层
    function F(){
         }
    F.prototype = Animal.prototype;
    Dog.prototype = new F();
    1:创建了一个新的构造函数F,让F的原型对象指向Animal的原型对象,然后让Dog的原型对象等于F的实例对象,因为F的实例对象拥有F.prototype的成员,即用于Ani
    
相关文章
|
5月前
|
数据安全/隐私保护
类和继承特性是如何在ES6中简化面向对象编程的?
类和继承特性是如何在ES6中简化面向对象编程的?
|
8月前
|
JavaScript 前端开发 Java
ES6新特性(六):类
ES6新特性(六):类
|
11月前
|
算法 JavaScript 前端开发
ES6学习笔记--对象的拓展
ES6学习笔记--对象的拓展
|
网络架构
ES6学习(六)—函数的扩展
ES6学习(六)—函数的扩展
ES5的继承和ES6的继承有什么区别
ES5的继承和ES6的继承有什么区别
109 0
【ES6】对象相关拓展
【ES6】对象相关拓展
65 0
ES6 从入门到精通 # 08:扩展的对象的功能
ES6 从入门到精通 # 08:扩展的对象的功能
90 0
ES6 从入门到精通 # 08:扩展的对象的功能
|
JavaScript 前端开发
【ES6】对象的拓展
【ES6】对象的拓展