看透JavaScript:原理、方法与实践
上QQ阅读APP看书,第一时间看更新

10.2 导入后重命名

很多时候模块开发者和模块使用者并不是同一个人,这样就很容易产生命名冲突的问题,即导入的变量跟自己定义的变量是同一个名字。当然,出现这种情况时可以把自己的变量改成其他名字,但是如果要导入多个模块,不同模块之间发生命名冲突怎么办呢?ES2015提供了简单的解决方案:可将导入的变量重命名为一个跟模块中不同的名字,使用as关键字来定义就可以了,例如下面的例子。

    //siteInfo.js
    var siteName = "excelib";
    var domainName = "www.excelib.com";
    function getSiteName(){
        return siteName;
    }
    function getDomainName(){
        return domainName;
    }
    export {getSiteName, getDomainName};


    //app.js
    import { getSiteName as getSite, getDomainName as getDomain } from "./siteInfo";
    console.log(getDomain());       //www.excelib.com
    console.log(getSiteName());     //出错

这个例子在app.js中将getSiteName导入为getSite函数,将getDomainName导入为getDomain函数,因此在app.js中调用getSiteName就会出错,而调用getDomain或者getSite函数都可以正常执行。

除了在导入的时候可以重命名外,在导出的时候也可以重命名,例如下面的例子。

    function getDomainName(){
        return domainName;
    }
    export {getDomainName as getDomain};

这个例子就将getDomainName导出为getDomain函数。