美文网首页程序员
送你一把钥匙,让你掀开ES6的神秘面纱

送你一把钥匙,让你掀开ES6的神秘面纱

作者: 一码一故事 | 来源:发表于2018-10-12 23:06 被阅读0次

    ES6实践

    JavaScript已经是互联网开发的第一大语言,而且正在变成一种全领域的语言,著名的程序员Jeff Atwood说过:“所有可以用JavaScript编写的程序,最终都会出现JavaScript的版本”。

    ES6是历史上最大的一次版本升级,即使是熟练的JavaScript程序员,也需要重新学习。JavaScript的学习,可以阅读阮一峰的专栏,写的非常好,专栏地址如下:

    http://es6.ruanyifeng.com/

    ES6本质上是一种语法糖,ES6写的代码,大部分都可以转换成ES5的代码。同一份代码,提供ES6、ES5的两个版本,做一下比较,会帮助我们理解ES6的本质。

    本文介绍一下ES6转换成ES5的方法,当自己读到某段ES6代码,想了解一下其里面的实现原理的话,将其转换成ES5,对比阅读是最好的方法。

    1、安装Node

    https://nodejs.org/zh-cn/

    2、安装Webstorm

    http://www.jetbrains.com/webstorm/

    3、安装es-checker

    es-checker是阮一峰写的一个模块,可以检查当前运行环境对ES6的支持度。

    npm install -g es-checker
    es-checker
    

    4、创建测试工程【ES6Test】

    打开Webstorm,新建一个空的工程【ES6Test】

    5、安装babel插件

    babel插件,可以将es6的代码转换成es5,我们可以借此窥视es6的实际实现逻辑

    注意:执行下面的命令时,需要把CMD命令行工具的当前目录设置为【ES6Test】下面

    npm install --save-dev babel-preset-latest
    npm install --save-dev babel-preset-react
    npm install --save-dev babel-preset-stage-2
    npm install --global babel-cli
    

    6、在ES6Test工程下,添加.babelrc

    .babelrc是babel插件的配置文件

    {
      "presets": [
        "latest",
        "react",
        "stage-2"
      ],
      "plugins": []
    }
    

    7、修改package.json

    在进行第5步的时候,系统会系统生成package.json,该文件的作用,先不用理会,我们现在只需要把下面的内容添加到该文件中.

    "scripts": {
        "build": "babel src -d lib"
      },
    

    8、新建src目录

    9、在src目录,新建ES6Test.js

    我们在该文件中编写ES6的代码

    10、将ES6的代码转换成ES5

    npm run build
    

    执行上面的语句后,我们的工程下面会生成一个lib目录,理解就存放了转换好的ES5的代码

    11、测试效果

    • ES6代码
    class Persion {
        constructor(name) {
            this.name = name;
        }
    
        sayName() {
            console.log(this.name);
        }
    }
    
    const p = new Persion('张三');
    p.sayName();
    
    
    • 转换后的ES5代码
    'use strict';
    
    var _createClass = function () {
        function defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
                var descriptor = props[i];
                descriptor.enumerable = descriptor.enumerable || false;
                descriptor.configurable = true;
                if ("value" in descriptor) descriptor.writable = true;
                Object.defineProperty(target, descriptor.key, descriptor);
            }
        }
    
        return function (Constructor, protoProps, staticProps) {
            if (protoProps) defineProperties(Constructor.prototype, protoProps);
            if (staticProps) defineProperties(Constructor, staticProps);
            return Constructor;
        };
    }();
    
    function _classCallCheck(instance, Constructor) {
        if (!(instance instanceof Constructor)) {
            throw new TypeError("Cannot call a class as a function");
        }
    }
    
    var Persion = function () {
        function Persion(name) {
            _classCallCheck(this, Persion);
    
            this.name = name;
        }
    
        _createClass(Persion, [{
            key: 'sayName',
            value: function sayName() {
                console.log(this.name);
            }
        }]);
    
        return Persion;
    }();
    
    var p = new Persion('张三');
    p.sayName();
    
    

    通过这种方法,我们可以很轻易的了解ES6的底层实现逻辑

    相关文章

      网友评论

        本文标题:送你一把钥匙,让你掀开ES6的神秘面纱

        本文链接:https://www.haomeiwen.com/subject/uhenaftx.html