class X {} 的 ES5 解释
class X {} 是 ES6 引入的一个新语法,可以看做是构造函数的语法糖。
那是如何实现的呢?
将代码 转译成 ES5 后,得:
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var X = function X() {
"use strict";
_classCallCheck(this, X);
};
我们来分析其实现。
- 首先,
class中的代码都是在严格模式下("use strict")执行的; - 其次,
class X {}只允许以new X()方式使用,不允许以普通函数调用方式使用- 是否通过
new方式使用,是在函数体中通过this instanceof X来判断的,编译器将其封装成了_classCallCheck()函数 - 检查没通过的情况下,会抛出
TypeError。
- 是否通过
所以,class X {} 可以看做是构造函数的语法糖。与构造函数不同的是:
class代码是在严格模式下执行的;class限制只能以new方式调用,否则报错。
转载自:https://juejin.cn/post/7212087651809787960