js类的继承,es5和es6的方法
存在的差异:
1. 私有数据继承差异
es5:执行父级构造函数并且将this指向子级
es6:在构造函数内部执行super方法,系统会自动执行父级,并将this指向子级
2. 共有数据(原型链方法)继承的差异
es5:子级原型链上的赋值,继承父级原型链上数据
es6:extend 父级,会自动将父级原型链上的数据给子级
3. 原型链上的共有数据是否可枚举for in
es5:可以枚举
es6:不可枚举
4. 构造函数的指向
es5:需要改变constructor的指向
es6:不需要改
5. 静态方法的写法差异
es5:直接在构造函数.静态方法
es6:static a=1;静态方法——浏览器不支持,要用bable
6. 实例_proto_的指向差异
es5:ƒ Child5(name)
es6:class Child6
es6的优点:
Class在语法上面更加贴近面向对象的写法;
Class实现继承更加易读、易理解;
更易于写Java后端等语言的使用;
****本质还是语法糖,使用prototype。
es5的方法
//父级
function Parent5(name) {//构造函数
this.name=name;//私有数据
}
Parent5.prototype.say=function () {//公共数据
console.log(this.name);
}
//子级
function Child5(name) {//构造函数
Parent5.call(this,name)//执行父级的构造函数,并将this指向子级
}
Child5.prototype=new Parent5;//将父级原型上的共有数据给自己
Child5.prototype.constructor=Child5;//改变constructor的指向问题
Child5.prototype.buy=function () {
console.log('buy');
}
var c5=new Child5('邵');//实例
c5.say()//邵
c5.buy()//buy
es6的方法
//父级
class Parent6{//类
constructor(name){//构造函数
this.name=name;
}
say(){
console.log(this.name);
}
}
class Child6 extends Parent6{//将父级原型上的共有数据给自己
constructor(name){
super(name);//执行父级的构造函数,并将this指向子级
}
buy(){
console.log('buy')
}
}
var c6=new Child6('邵');
c6.say()//邵
c6.buy()//buy
js类的继承,es5和es6的方法的更多相关文章
- js类式继承模式学习心得
最近在学习<JavaScript模式>,感觉里面的5种继承模式写的很好,值得和大家分享. 类式继承模式#1--原型继承 方法 让子函数的原型来继承父函数实例出来的对象 <script ...
- JS创建对象、继承原型、ES6中class继承
面向对象编程:java中对象的两个基本概念:1.类:类是对象的模板,比如说Leader 这个是泛称领导,并不特指谁.2:实例:实例是根据类创建的对象,根据类Leader可以创建出很多实例:liyi,y ...
- 精读JavaScript模式(八),JS类式继承
一.前言 这篇开始主要介绍代码复用模式(原书中的第六章),任何一位有理想的开发者都不愿意将同样的逻辑代码重写多次,复用也是提升自己开发能力中重要的一环,所以本篇也将从“继承”开始,聊聊开发中的各种代码 ...
- js类(继承)(二)
1. 定义js类 js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Sh ...
- js类的继承
1.类式继承 首先要做的是创建构造函数.按惯例,其名称就是类名,首字母应该大写.在构造函数中,创建实例属性要用关键字this .类的方法则被添加到prototype对象中.要创建该类的实例,只需结合关 ...
- JS 类和继承
function User(name, pass) { this.name = name this.pass = pass } User.prototype.showName = function ( ...
- js类(继承)(一)
//call() //调用一个对象的一个方法,以另一个对象替换当前对象. //call([thisObj[,arg1[, arg2[, [,.argN]]]]]) //参数 //thisObj / ...
- ES5和ES6数组方法
ES5 方法 indexOf和lastIndexOf 都接受两个参数:查找的值.查找起始位置不存在,返回 -1 :存在,返回位置.indexOf 是从前往后查找, lastIndexOf 是从后往前查 ...
- js原生设计模式——2面向对象编程之继承—new类式继承
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
随机推荐
- TCP/IP协议三次握手与四次握手
TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图:图1 TCP报文格式 上图中有几个 ...
- C++ 常用设计模式(学习笔记)
1.工厂模式:简单工厂模式.工厂方法模式.抽象工厂模式 1).简单工厂模式:主要特点是需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类. typedef enum { T80 ...
- mysql 分组排序取最值
查各个用户下单最早的一条记录 查各个用户下单最早的前两条记录 查各个用户第二次下单的记录 一.建表填数据: SET NAMES utf8mb4; -- 取消外键约束 ; -- ------------ ...
- 马凯军201771010116《面向对象程序设计(java)》第七周学习总结
理论与知识部分 多态性:概念:指在程序中同一符号在不同的情况下具有不同的解释.超类中定义的域或方法,被子类继承之后,可以具有不同的数据类型或表现出不同的行为.这使得同一域或方法在超类及各个子类中具有不 ...
- 剑指Offer 43. 左旋转字符串 (字符串)
题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=&quo ...
- 一轮冲刺(NABCD)和需求分析
N我们的创意是为了解决我们测量人员在测量结束后要计算一些数据的问题,当我们观测角度后,有大量的角度需要计算,有时会用到角度与弧度的转换. A我们测量人员知道计算的公式,了解一些c++和c# B我们这个 ...
- SpringBoot的学习【3.HelloWorld配置细节】
/** * @SpringBootApplication用来标注主程序类. */ @SpringBootApplication public class First { public static v ...
- spring集成jedis简单实例
jedis是redis的java客户端,spring将redis连接池作为一个bean配置. redis连接池分为两种,一种是“redis.clients.jedis.ShardedJedisPool ...
- Python多进程并发操作中进程池Pool的应用
Pool类 在使用Python进行系统管理时,特别是同时操作多个文件目录或者远程控制多台主机,并行操作可以节约大量的时间.如果操作的对象数目不大时,还可以直接使用Process类动态的生成多个进程,十 ...
- android active间数据传递
Bundle是key-value存储. Bundle bundle=new Bundle(); bundle.putString("key", "value") ...