当前位置: 首页 > Web前端 > HTML5

JavaScript基础:Babel翻译类进程侦探

时间:2023-04-05 14:46:22 HTML5

零,前言虽然对象在JavaScript中无处不在,但这种语言并没有使用经典的基于类的继承,而是依赖于原型,至少在ES6之前是这样。到时候,假设我们要定义一个可以设置id和坐标的类,我们会这样写://ShapeclassfunctionShape(id,x,y){this.id=id;this.setLocation(x,y);}//设置坐标的原型方法Shape.prototype.setLocation=function(x,y){this.x=x;这个.y=y;};上面是类定义,下面是设置坐标的原型方法。从ECMAScript2015开始,引入了语法糖类,开发者可以通过class关键字来定义类。我们可以直接定义类,在类中写静态方法,或者继承类等。上面的例子可以改写为:classShape{constructor(id,x,y){//constructorsyntaxsugarthis.id=id;this.setLocation(x,y);}setLocation(x,y){//原型方法this.x=x;这个.y=y;}}一种更“传统语言”的书写方式。语法糖写法的好处是,当类中充斥着各种静态方法和继承关系时,像类这样写对象模板的简洁性会更加突出,而且更不容易出错。但不可否认的是,时至今日,我们仍然需要为一些用户兼容我们的ES6+代码。Class是TodoList上的一项:作为当下最流行的JavaScript编译器,Babel为我们翻译了ECMAScript语法,我们再也不用担心如何向后兼容了。在本地安装Babel或使用BabelCLI工具来查看我们的Shape类发生了什么。遗憾的是你会发现代码大小从现在的219字节增加到2.1KB,即使算上代码压缩(未混淆)代码,代码也是1.1KB。翻译后的代码输出如下所示:"usestrict";var_createClass=function(){functiona(a,b){for(varc,d=0;d