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 ...
随机推荐
- 为DBNavigator的按钮加中文
转自:http://hi.baidu.com/debiansir/item/0699f5b6bb4d99f063388e71 /*Delphi中数据库控件DBNavigator使用起来不错,但是按钮上 ...
- Linux3.10.0块IO子系统流程(5)-- 为SCSI命令准备聚散列表
SCSI数据缓冲区组织成聚散列表的形式.Linux内核中表示聚散列表的基本数据结构是scatterlist,虽然名字中有list,但它只对应一个内存缓冲区,聚散列表就是多个scatterlist的组合 ...
- SQL-44 将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现。
题目描述 将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现.CREATE TABLE IF NOT EXISTS ti ...
- scrapy框架初级
scrapy入门教程:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html 一.安装 python模块网站,应用文件放置在s ...
- JAVA学习笔记系列1-Java版本介绍
JavaSE(Java Standard Edition):标准版,定位在个人计算机上的应用(桌面应用).因为一般都是Windows系统,因此Java的这个发展并不好. JavaEE(Java Ent ...
- C#实现焦点变色
Form1.cs using System;using System.Collections.Generic;using System.ComponentModel;using System.Data ...
- FreeSWITCH与FreeSWITCH对接
(主机A ---> 主机B)192.168.100.A主机:修改/usr/local/freeswitch/conf/dialplan/default.xml 10 <ex ...
- excel图片链接转图片
Sub LoadImage() Dim HLK As Hyperlink, Rng As Range For Each HLK In ActiveSheet.Hyperlinks '循环活动工作表中的 ...
- 无法新建EXCLE
Regedit 进入注册表,找到HKEY_CLASSES_ROOT>.xls和.xlsx的ShellNew的值设置为:C:\Windows\ShellNew\EXCEL12.XLSX
- document.ready(function(){}),window.onload,$(function(){})的区别
https://blog.csdn.net/qkzhx0516/article/details/79236514