浅谈es5和es6中的继承
首先给大家介绍下在es5中构造函数的继承
function A(){
2 //构造函数A
3 this.name="我是A函数";
4 }
5
6 A.prototype={
7 constructor:A,
8 render(){
9 console.log("我是A实例的render方法")
10 }
11 }
12
13 let a=new A();
14
15 function B(a){
16 this.age=a;
17 A.call(this);
18 //通过call改变this指向从而达到继承A函数里面的私有属性
19 console.log(this.name)
20 }
21 let b=new B("18")
22
23 //B函数继承A函数的原型
24 //B.prototype=A.prototype; 如果是这样直接继承的话会出现如果你改变B的方法A的同时在变
25 B.prototype=Object.create(A.prototype)
26 //原型继承完毕需要更改一下constructor指向
27 B.prototype.constructor=B;
28 B.prototype.render();//这样的话通过B函数的原型就能调用A函数的原型方法render了
29 console.log(b)
//总结 在es5中继承无非就是先私有属性的继承 注意通过call和apply改变this指向 接着就是原型的继承了
其实想要彻底弄清es5的继承可以从原型链上去理解 下面通过几个方法给大家介绍下原型链
//在上面代码的基础上
//在上方代码中A函数没有toString这个函数 假如说我们通过a调用toString这个函数能不能调用到呢
a.toString()
//显而易见 我们能够找到这个函数 为什么呢 因为我们通过a找这个方法时候
//首先系统会先去我们A这个构造函数中去寻找 假如说我们从A中没有找到
//然后接着去A的原型prototype去寻找 如果这里面又没找到接着去找a的__proto__
//如果这个a的__proto__里面没有找到就接着再去__proto__去找 ,顺着proto
//找到最后是null //所以如果我们构造函数中有这个方法的话会先取我们构造函数中的 原型中有的话就去原型找
//都没有才去__proto__找
配张原型链的图片理解下

接下来分享下es6的继承 es6的继承相对来说就简单多了 也更方便初学者使用了
es6的class函数语法类似与构造函数 基本上大同小异
class A{
constructor(){//相当于原型构造函数
this.name="aa";//成员属性或者叫私有属性
this.init()
}
init(){
//这些都是原型方法
//基本上类似构造函数
}
}
class的继承
class B extends A{
constructor(){
super(A函数的constructor传的参数)
//super()是一个语法糖 作用是调用父构造函数
//在没有调用super之前this指向不能使用
}
}
浅谈es5和es6中的继承的更多相关文章
- 浅谈ES5和ES6继承和区别
最近想在重新学下ES6,所以就把自己学到的,记录下加强下自己的理解 首先先简单的聊下ES5和ES6中的继承 1.在es5中的继承: function parent(a,b){ this a = a; ...
- ES5和ES6中的继承
看到一篇写的非常好的关于js继承的文章,其中对构造函数.原型.实例之间的关系的描述十分透彻,故转载作者文章以随时学习,并供大家共同进步! ES5 ES5中的继承,看图: function Super( ...
- ES5和ES6中的继承 图解
Javascript中的继承一直是个比较麻烦的问题,prototype.constructor.__proto__在构造函数,实例和原型之间有的 复杂的关系,不仔细捋下很难记得牢固.ES6中又新增了c ...
- ES5和ES6中对于继承的实现方法
在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是 ...
- ES5与ES6中的继承
ES5继承在ES5中没有类的概念,所以一般都是基于原型链继承,具体的继承方法有以下几种: 父类: function Father (name) { this.name = name || 'sam' ...
- 浅谈surging服务引擎中的rabbitmq组件和容器化部署
1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...
- 浅谈线程池(中):独立线程池的作用及IO线程池
原文地址:http://blog.zhaojie.me/2009/07/thread-pool-2-dedicate-pool-and-io-pool.html 在上一篇文章中,我们简单讨论了线程池的 ...
- 【ASP.NET MVC系列】浅谈NuGet在VS中的运用
一 概述 在我们讲解NuGet前,我们先来看看一个例子. 1.例子: 假设现在开发一套系统,其中前端框架我们选择Bootstrap,由于选择Bootstrap作为前端框架,因此,在项目中,我们 ...
- 浅谈如何检查Linux中开放端口列表
给大家分享一篇关于如何检查Linux中的开放端口列表的详细介绍,首先如果你想检查远程Linux系统上的端口是否打开请点击链接浏览.如果你想检查多个远程Linux系统上的端口是否打开请点击链接浏览.如果 ...
随机推荐
- flask请求流程
- 7.bootstrap HTML编码规范
Bootstrap HTML编码规范 语法 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法. 嵌套元素应当缩进一次(即两个空格). 对于属性的定义,确保全部使用双 ...
- git 和github
ssh git: 是一个版本管理工具,是可以在你电脑不联网的情况下,只在本地使用的一个版本管理工具,其作用就是可以让你更好的管理你的程序,比如你原来提交过的内容,以后虽然修改了,但是通过git这 ...
- 译文 [ROM][多国语言][2015.06.11] Lenovo S750 (MTK6589) - andrea_d86-lenovos750-4.2.2
************************************************** andrea_d86-lenovos750-4.2.2-150530 ************** ...
- django1.8 增加注册用户其他字段(用户扩展)
在V1.6及之后版本已经删除get_profile()方法,需要使用userprofile. 1.新建moduel,名为UserProfile: class UserProfile(models.Mo ...
- 导入自定义模块model
编写m2.py,脚本内容如下: #!/usr/bin/python # -*- coding: utf-8 -*- 'its a module test' __author__ = 'mm' impo ...
- windows下的FTP命令
假设要连接的FTP信息如下: FTP Server: FtpTest User: tester Password: 123123 打开Windows的开始菜单,执行"运行"命令,在 ...
- 重装win7系统的过程
U盘重装系统准备工作: 1.下载一个制作U盘系统的软件,随便哪个都行,把U盘变成系统盘 2.下载镜像,将镜像copy到系统盘内即可(无需解压) 3.进入BIOS系统,将boot进行设置,将U盘设置为第 ...
- 云端办公是 Office系统的未来方向么 ?
云端办公是 Office系统的未来方向么 ? 话说随着互联网,HTML技术,云计算等技术的发展,越来越多的应用已经迁移到云端, 以我们熟悉的电脑游戏为例,从单机游戏,到网络游戏,再到网页游戏,基本就是 ...
- December 28th 2016 Week 53rd Wednesday
Knowledge is a treasure, but practice is the key to it. 知识是珍宝,而实践是获取她的钥匙. I know a lot, but what I r ...