浅谈es5和es6中的继承

首先给大家介绍下在es5中构造函数的继承

 1  function A(){
 2  2             //构造函数A
 3  3             this.name="我是A函数";
 4  4         }
 5  5
 6  6         A.prototype={
 7  7             constructor:A,
 8  8             render(){
 9  9                 console.log("我是A实例的render方法")
10 10             }
11 11         }
12 12
13 13         let a=new A();
14 14
15 15         function B(a){
16 16             this.age=a;
17 17             A.call(this);
18 18             //通过call改变this指向从而达到继承A函数里面的私有属性
19 19             console.log(this.name)
20 20         }
21 21         let b=new B("18")
22 22
23 23         //B函数继承A函数的原型
24 24         //B.prototype=A.prototype; 如果是这样直接继承的话会出现如果你改变B的方法A的同时在变
25 25         B.prototype=Object.create(A.prototype)
26 26         //原型继承完毕需要更改一下constructor指向
27 27         B.prototype.constructor=B;
28 28         B.prototype.render();//这样的话通过B函数的原型就能调用A函数的原型方法render了
29 29         console.log(b)
30
31
32 //总结 在es5中继承无非就是先私有属性的继承 注意通过call和apply改变this指向 接着就是原型的继承了 

  其实想要彻底弄清es5的继承可以从原型链上去理解 下面通过几个方法给大家介绍下原型链

 1 //在上面代码的基础上
 2         //在上方代码中A函数没有toString这个函数 假如说我们通过a调用toString这个函数能不能调用到呢
 3         a.toString()
 4         //显而易见 我们能够找到这个函数 为什么呢 因为我们通过a找这个方法时候
 5         //首先系统会先去我们A这个构造函数中去寻找 假如说我们从A中没有找到
 6         //然后接着去A的原型prototype去寻找 如果这里面又没找到接着去找a的__proto__
 7         //如果这个a的__proto__里面没有找到就接着再去__proto__去找 ,顺着proto
 8         //找到最后是null
 9
10         //所以如果我们构造函数中有这个方法的话会先取我们构造函数中的 原型中有的话就去原型找
11         //都没有才去__proto__找

配张原型链的图片理解下

接下来分享下es6的继承 es6的继承相对来说就简单多了 也更方便初学者使用了

es6的class函数语法类似与构造函数  基本上大同小异

 1 class A{
 2     constructor(){//相当于原型构造函数
 3        this.name="aa";//成员属性或者叫私有属性
 4         this.init()
 5     }
 6     init(){
 7         //这些都是原型方法
 8         //基本上类似构造函数
 9     }
10 }
11
12 class的继承
13 class B extends A{
14     constructor(){
15         super(A函数的constructor传的参数)
16         //super()是一个语法糖 作用是调用父构造函数
17         //在没有调用super之前this指向不能使用
18     }
19 }

原文地址:https://www.cnblogs.com/cq1715584439/p/10712439.html

时间: 2024-10-01 04:07:57

浅谈es5和es6中的继承的相关文章

ES5和ES6中的继承

看到一篇写的非常好的关于js继承的文章,其中对构造函数.原型.实例之间的关系的描述十分透彻,故转载作者文章以随时学习,并供大家共同进步! ES5 ES5中的继承,看图: 1 function Super() {} 2 3 function Sub() {} 4 Sub.prototype = new Super(); 5 Sub.prototype.constructor = Sub; 6 7 var sub = new Sub(); 8 9 Sub.prototype.constructor

ES5和ES6中的继承 图解

Javascript中的继承一直是个比较麻烦的问题,prototype.constructor.__proto__在构造函数,实例和原型之间有的 复杂的关系,不仔细捋下很难记得牢固.ES6中又新增了class和extends,和ES5搅在一起,加上平时很少自己写继承,简直乱成一锅粥.不过还 好,画个图一下就清晰了,下面不说话了,直接上图,上代码. ES5 ES5中的继承,看图: 1 function Super() {} 2 3 function Sub() {} 4 Sub.prototype

ES5和ES6中对于继承的实现方法

在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是通过将子类构造函数的原型作为父类构造函数的实例,这样就连通了子类-子类原型-父类,原型链的特点就是逐层查找,从子类开始一直往上直到所有对象的原型Object.prototype,找到属性方法之后就会停止查找,所以下层的属性方法会覆盖上层. 一个基本的基于原型链的继承过程大概是这样的: //先来个父类

ES5与ES6中的继承

ES5继承在ES5中没有类的概念,所以一般都是基于原型链继承,具体的继承方法有以下几种: 父类: function Father (name) { this.name = name || 'sam' this.sleep = function () { // 实例方法 return this.name + '正在睡觉' } } Father.prototype.eat = funciton () { // 原型方法 return this.name + '正在吃饭' } 一,原型链继承核心:将父

浅谈“回调”在程序设计中的好处

1:回调还是返回(return) 在写代码的时候,我们经常碰到这样的场景:调用一个函数或者方法时需要返回多个值给上级调用者,如示例: void methodA(){    Wrap w = methodB();     w.one; //use    w.two; } Wrap methodB(){     do something;     return Wrap; } class Wrap{    Type one;    Type two; } 上面是我刚开始写代码时候常用的方式,在多个类

重学ES6(二):ES5和ES6中Class类的相同与不同

ES5和ES6中Class类的相同与不同 先说结论,简而言之ES5用function定义类,ES6用class定义类,class的本质是function,ES6中的类只是语法糖,它并没有改变ES5下类实现的本质. 类的定义 ES5 // ES5函数来描写类 // 声明类 let Animal = function (type) { this.type = type // 定义实例方法 this.drink = function () { console.log('drink') } } // 定

ES5中的继承和ES6中的继承

在JavaScript中,prototype.constructor.__proto__.构造函数.原型.实例这些概念已经很让人头疼,再加上ES6的class .extends已经乱成一锅粥了,平时对这些用的少写的少,是得好好捋清楚.看了几篇文章有了自己的理解,理解如下: 构造函数.prototype = 原型: 构造函数.prototype.constructor = 原型.constructor = 构造函数: new 构造函数 = 实例: 实例.constructor = 构造函数: 实例

JS创建对象、继承原型、ES6中class继承

面向对象编程:java中对象的两个基本概念:1.类:类是对象的模板,比如说Leader 这个是泛称领导,并不特指谁.2:实例:实例是根据类创建的对象,根据类Leader可以创建出很多实例:liyi,yingjiangyong等.每个实例表示具体的领导,他们 都属于Leader类型.ES6之前的版本中没有类和实例,是通过原型prototype完成面向对象编程.区别:JS中没有类和对象,所有的对象都是实例,只是把一个对象的原型指向另一个对象.//创建对象的第一种方法:.__proto__var Un

ES6 中的继承

ES6 继承  (逼格最高,也是未来的趋势,必学必用) 知识点: class 类 ES6给我们提供了class的语法糖,可以通过class来创建类 1 class Person {//此行没有括号,在第二行constructor()传参 2 constructor(name,age){ 3 this.name = name; 4 this.age = age; 5 } 6 /*下面的写法就等同于把方法挂在原型上*/ 7 static say(){// 加了static 静态方法,只给类用的方法