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