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
    
相关文章
|
7月前
|
JavaScript
js开发:请解释什么是ES6的类(class),并说明它与传统构造函数的区别。
ES6的类提供了一种更简洁的面向对象编程方式,对比传统的构造函数,具有更好的可读性和可维护性。类使用`class`定义,`constructor`定义构造方法,`extends`实现继承,并可直接定义静态方法。示例展示了如何创建`Person`类、`Student`子类以及它们的方法调用。
90 2
|
4月前
|
JavaScript 前端开发 Java
ES6新特性(六):类
ES6新特性(六):类
|
7月前
|
算法 JavaScript 前端开发
ES6学习笔记--对象的拓展
ES6学习笔记--对象的拓展
|
网络架构
ES6学习(六)—函数的扩展
ES6学习(六)—函数的扩展
ES5的继承和ES6的继承有什么区别
ES5的继承和ES6的继承有什么区别
78 0
【ES6】对象相关拓展
【ES6】对象相关拓展
44 0
|
Java
原生类
今天做笔试题时发现了一个概念,查阅了文档之后才明白,原生类的存在,慢慢学习慢慢进步吧! Java中,数据类型分为基本数据类型(或叫做原生类、内置类型)和引用数据类型。 Java不是纯的面向对象的语言,不纯的地方就是这些基本数据类型不是对象。当然初期Java的运行速度很慢,但是基本数据类型能在一定程度上改善性能。如果你想编写纯的面向对象的程序,用包装器类是取代基本数据类型就可以了。
103 0
ES6 从入门到精通 # 08:扩展的对象的功能
ES6 从入门到精通 # 08:扩展的对象的功能
80 0
ES6 从入门到精通 # 08:扩展的对象的功能