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 相关文章推荐
通过ifame指向的页面高度调整iframe的高度
Oct 05 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
Feb 13 Javascript
js 与 php 通过json数据进行通讯示例
Mar 26 Javascript
JavaScript中自定义事件用法分析
Dec 23 Javascript
jquery插件star-rating.js实现星级评分特效
Apr 15 Javascript
在JavaScript应用中实现延迟加载的方法
Jun 25 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
Jul 19 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
Oct 27 Javascript
layer页面跳转,获取html子节点元素的值方法
Sep 27 Javascript
详解javascript中var与ES6规范中let、const区别与用法
Jan 11 Javascript
Vue 打包体积优化方案小结
May 20 Javascript
使用JavaScript通过前端发送电子邮件
May 22 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
在WIN98下以apache模块方式安装php
2006/10/09 PHP
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
python链接Oracle数据库的方法
2015/06/28 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
python发送邮件功能实现代码
2016/07/15 Python
python中正则表达式的使用方法
2018/02/25 Python
python实现播放音频和录音功能示例代码
2018/12/30 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
详解python破解zip文件密码的方法
2020/01/13 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
求职简历自荐信
2014/06/18 职场文书
会计专业毕业生自荐书
2014/06/25 职场文书
个人整改方案范文
2014/10/25 职场文书
应急管理工作总结2015
2015/05/04 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js