晴明的博客园 GitHub      CodePen      CodeWars     

[ES6] Module

#

import

Syntax

import defaultMember from "module-name";
import * as name from "module-name";
import { member } from "module-name";
import { member as alias } from "module-name";
import { member1 , member2 } from "module-name";
import { member1 , member2 as alias2 , [...] } from "module-name";
import defaultMember, { member [ , [...] ] } from "module-name";
import defaultMember, * as name from "module-name";
import "module-name";

 

用于导入从外部模块、其他脚本导出的函数。

name参数用于接收导出成员的对象名称。

member参数指定独立成员,而name参数导入所有成员。

如果模块导出单个默认参数,而不是一系列成员,name也可以是函数。

 

导入整个模块的内容。以下代码将myModule添加到当前作用域,其中包括所有导出绑定。

import myModule from "my-module.js";

导入模块的单个成员。以下代码将myMember添加到当前作用域。

import {myMember} from "my-module.js";

导入模块的多个成员。以下代码会将foo和bar都添加到当前作用域。

import {foo, bar} from "my-module.js";

导入成员并指定一个方便的别名。以下代码将shortName添加到当前作用域。

import {reallyReallyLongModuleMemberName as shortName} from "my-module.js";

import {reallyReallyLongModuleMemberName as shortName, anotherLongModuleName as short} from "my-module";

导入整个模块,具有不导入绑定的副作用。

import "my-module.js";

 

生成一个Collection对象包含 my-module所有的export

import * as Collection from 'my-module.js'

 

#以下代码将myDefault,foo,bar插入到当前作用域。
注意,myDefault是默认导出的项;foo,bar为exort导出的项(即my-module.js中的代码为:...;export foo;export bar;export default myDefault;)

import myDefault, {foo, bar} from "my-module.js"

eg:

import myDefault, {foo, bar} from "my-module.js"
console.log(foo);
console.log(bar);
console.log(myDefault);

上面的代码,babel后:
可以看出,myDefault并不是整个module,而只是module的default这一个导出项。

"use strict";

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

var _myModuleJs = require("my-module.js");

var _myModuleJs2 = _interopRequireDefault(_myModuleJs);

console.log(_myModuleJs.foo);
console.log(_myModuleJs.bar);
console.log(_myModuleJs2["default"]);

 

#辅助处理AJAX JSON请求。

// --file.js--
function getJSON(url, callback) {
  let xhr = new XMLHttpRequest();
  xhr.onload = function () { 
    callback(this.responseText) 
  };
  xhr.open("GET", url, true);
  xhr.send();
}

export function getUsefulContents(url, callback) {
  getJSON(url, data => callback(JSON.parse(data)));
}

// --main.js--
import { getUsefulContents } from "file.js";
getUsefulContents("http://www.example.com", data => {
  doSomethingUseful(data);
});

 

export

Syntax
export { name1, name2, …, nameN };
export { variable1 as name1, variable2 as name2, …, nameN };
export let name1, name2, …, nameN; // also var
export let name1 = …, name2 = …, …, nameN; // also var, const

export default expression;
export default function (…) { … } // also class, function*
export default function name1(…) { … } // also class, function*
export { name1 as default, … };

export * from …;
export { name1, name2, …, nameN } from …;
export { import1 as name1, import2 as name2, …, nameN } from …;

 

用于从给定文件(或模块)导出函数和对象。
有两种不同的导出方式,每种方式对应于上述的一种语法:
    命名导出
    export { myFunction }; // 导出一个函数声明
    export const foo = Math.sqrt(2); // 导出一个常量

    默认导出 (每个脚本只能有一个):
    export default myFunctionOrClass
    // 这里没有分号

对于只导出一部分值来说,命名导出的方式很有用。
在导入时候,可以使用相同的名称来引用对应导出的值。
关于默认导出方式,每个模块只有一个默认导出。
一个默认导出可以是一个函数,一个类,一个对象等。
当最简单导入的时候,这个值是将被认为是”入口”导出值。

#命名导出
在这个模块里,我们可以这么导出:

// module "my-module.js"
export function cube(x) {
  return x * x * x;
}
const foo = Math.PI + Math.SQRT2;
export { foo };

这样的话,在其它脚本 (cf. import),我们可以这样使用:

import { cube, foo } from 'my-module.js';
console.log(cube(3)); // 27
console.log(foo);    // 4.555806215962888

 

#默认导出
如果我们只想导出一个简单的值或者想在模块中保留一个候选值,就可以使用默认导出:

// module "my-module.js"
let cube = function cube(x) {
  return x * x * x;
}
export default cube;

然后,在另一个脚本中,默认的导出值就可以被简单直接的导入:

// module "my-module.js"
import myFunction from 'my-module';
console.log(myFunction(3)); // 27​​​​​

 

#

            //export
            
            //file msample.js
            class ColorRectangle extends Rectangle {
                constructor(height, width, color) {
                    super(height, width);
                    this.color = color;
                }
                toString() {
                    return this.color + ' ' + super.toString();
                }
            }
            export {
                ColorRectangle
            };
            // export ColorRectangle;
            
            //export default
            
            //file msample.js
            export default ColorRectangle;
            
            //import
            
            //file main.js
            import ColorRectangle from 'msample';
            //import {ColorRectangle} from 'msample';
            //import * as Polygon from 'msample';
            //import DefatulPolygon from 'msample';

 

posted @ 2016-05-13 14:34  晴明桑  阅读(213)  评论(0编辑  收藏  举报