es5 类与es6中class的区别小结


Posted in Javascript onNovember 09, 2020

前言

在es5中主要是通过构造函数方式和原型方式来定义一个类,在es6中我们可以通过class来定义类,今天整理一下它们的区别。

关于es5中定义类的方式,可以看这一篇Js的‘类',我们这里主要聊es5类和es6中class类的区别。

一、class类必须new调用,不能直接执行。

es5 类与es6中class的区别小结

class类执行的话会报错,而es5中的类和普通函数并没有本质区别,执行肯定是ok的。

二、class类不存在变量提升

es5 类与es6中class的区别小结

es5 类与es6中class的区别小结

图2报错,说明class方式没有把类的定义提升到顶部。

三、class类无法遍历它实例原型链上的属性和方法

function Foo (color) {
 this.color = color
}
Foo.prototype.like = function () {
 console.log(`like${this.color}`)
}
let foo = new Foo()

for (let key in foo) {
 // 原型上的like也被打印出来了
 console.log(key) // color、like
}
class Foo {
 constructor (color) {
  this.color = color
 }
 like () {
  console.log(`like${this.color}`)
 }
}
let foo = new Foo('red')

for (let key in foo) {
 // 只打印一个color,没有打印原型链上的like
 console.log(key) // color
}

四、new.target属性

es6为new命令引入了一个new.target属性,它会返回new命令作用于的那个构造函数。如果不是通过new调用或Reflect.construct()调用的,new.target会返回undefined

function Person(name) {
 if (new.target === Person) {
 this.name = name;
 } else {
 throw new Error('必须使用 new 命令生成实例');
 }
}

let obj = {}
Person.call(obj, 'red') // 此时使用非new的调用方式就会报错

五、class类有static静态方法

static静态方法只能通过类调用,不会出现在实例上;另外如果静态方法包含 this 关键字,这个 this 指的是类,而不是实例。static声明的静态属性和方法都可以被子类继承。

class Foo {
 static bar() {
 this.baz(); // 此处的this指向类
 }
 static baz() {
 console.log('hello'); // 不会出现在实例中
 }
 baz() {
 console.log('world');
 }
}

Foo.bar() // hello

总结

到此这篇关于es5 类与es6中class的区别的文章就介绍到这了,更多相关es5类与es6中class区别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jquery 卷帘效果实现代码(不同方向)
Feb 05 Javascript
JQuery插入DOM节点的方法
Jun 11 Javascript
JavaScript中Null与Undefined的区别解析
Jun 30 Javascript
js实现对table的增加行和删除行的操作方法
Oct 13 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
Feb 03 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
走进javascript——不起眼的基础,值和分号
Feb 24 Javascript
mac中利用NVM管理不同node版本的方法详解
Nov 08 Javascript
vue加载完成后的回调函数方法
Sep 07 Javascript
layui table去掉右侧滑动条的实现方法
Sep 05 Javascript
Vue实现兄弟组件间的联动效果
Jan 21 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
Apr 11 Javascript
vue实现标签云效果的示例
Nov 09 #Javascript
写一个Vue loading 插件
Nov 09 #Javascript
解决Vue大括号字符换行踩的坑
Nov 09 #Javascript
vue data有值,但是页面{{}} 取不到值的解决
Nov 09 #Javascript
vue 防止页面加载时看到花括号的解决操作
Nov 09 #Javascript
Webpack的Loader和Plugin的区别
Nov 09 #Javascript
解决vue初始化项目一直停在downloading template的问题
Nov 09 #Javascript
You might like
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
php中的异常和错误浅析
2017/05/03 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
JavaScript 学习笔记(十五)
2010/01/28 Javascript
JavaScript 学习历程和心得分享
2010/12/12 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
浅析JS刷新框架中的其他页面 && JS刷新窗口方法汇总
2013/07/08 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
仅利用30行Python代码来展示X算法
2015/04/01 Python
python 网络编程常用代码段
2016/08/28 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
python SOCKET编程基础入门
2021/02/27 Python
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
银行职员思想汇报
2013/12/31 职场文书
支部鉴定材料
2014/06/02 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
税务职业生涯规划书范文
2014/09/16 职场文书
Oracle笔记
2021/04/05 Oracle
浅谈Python数学建模之整数规划
2021/06/23 Python
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android