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 相关文章推荐
图片自动缩小的js代码,用以防止图片撑破页面
Mar 12 Javascript
表单元素事件 (Form Element Events)
Jul 17 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
Dec 03 Javascript
用javascript删除当前行,添加行(示例代码)
Nov 25 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
Dec 11 Javascript
javascript 10进制和62进制的相互转换
Jul 31 Javascript
实例详解angularjs和ajax的结合使用
Oct 22 Javascript
js实现人民币大写金额形式转换
Apr 27 Javascript
Vue内容分发slot(全面解析)
Aug 19 Javascript
解决VUEX兼容IE上的报错问题
Mar 01 Javascript
重学JS之显示强制类型转换详解
Jun 30 Javascript
详解js中的几种常用设计模式
Jul 16 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
第十二节--类的自动加载
2006/11/16 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
javascript之更有效率的字符串替换
2008/08/02 Javascript
JavaScript QueryString解析类代码
2010/01/17 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
python遍历目录的方法小结
2016/04/28 Python
Python深入06——python的内存管理详解
2016/12/07 Python
python使用opencv进行人脸识别
2017/04/07 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
python实现kmp算法的实例代码
2019/04/03 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
Python中私有属性的定义方式
2020/03/05 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
linux面试题参考答案(11)
2012/05/01 面试题
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
应付会计岗位职责
2013/12/12 职场文书
医学生个人求职信范文
2014/02/07 职场文书
团队拓展活动总结
2014/08/27 职场文书
课内比教学心得体会
2014/09/09 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
民事二审代理词
2015/05/25 职场文书
飞越疯人院观后感
2015/06/09 职场文书
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android