# 模块化


# 单对象模式,也叫做命名空间模式

//mommon/BetterFunction.js
var MyFunctions = {
    isOdd: function (n) {
        return n % 2 !== 0;
    },
    sort(arr, compare) {
        //....
    }
}

var arr = [
    {name:'张三',age:18,weight:60},
    {name:'李四',age:25,weight:80},
    {name:'王五',age:14,weight:65},
    {name:'小六',age:17,weight:60}
]

MyFunctions.sort(arr,function(a,b){
    return a.age - b.age
})
   
console.log(arr)

引入

 <script src="../../common/BetterFunction.js"></script>

# node 模块

注意:node 环境用不了es6模块 可以下依赖包 或者 ....................

# 方法1

暴露模块

//async.js
module.exports = {
     name:'曹昆',
     isOdd(n){
          return n % 2 !== 0;
     }
}

导入模块

//main.js
const async = require('./async.js')
console.log(async.isOdd(1))

# 方法2

按需导出

var MyFunctions = {
     name:'曹昆',
     isOdd(n){
          return n % 2 !== 0;
     }
}

module.exports = {
     MyFunctions
}

按需导入 用对象的解构赋值 获取 {MyFunctions}

const {MyFunctions} = require('./async.js')

console.log(MyFunctions.isOdd(1)

# es6模块

# 方法1

暴露模块

//test.js
module.exports = {
     name:'曹昆',
     isOdd(n){
          return n % 2 !== 0;
     }
}

导入模块

import testName from './test';
console.log(testName)

# 方法2

默认导出

//test.js
export default = {
    name: '曹昆'
}

导入

import testName from './test'
console.log(testName)

# 方法3

按需导出

【test.js】

export function fnName1 (){
    return '按需导出 - 1';
}

export function fnName2 (){
    return '按需导出 - 2'
}

按需导入 用对象的解构赋值 获取 {fnName1, fnName2}

【index.js】
import {fnName1, fnName2} from './test'
console.log(fnName1())
// => 按需导出 - 1
console.log(fnName2())
// => 按需导出 - 2

# 方法4

默认导出 + 按需导出

【test.js】

// 默认导出
export default {
    name: '曹昆'
}

// 按需导出
export function fnName1 (){
    return '按需导出 - 1';
}
export function fnName2 (){
    return '按需导出 - 2'
}

导入

【index.js】

// testName: 接收默认导出
// {fnName1, fnName2} 解构接收按需导出的
import testName,{fnName1, fnName2} from './test';

console.log(testName);
// => {name: "曹昆"}
console.log(fnName1());
// => 按需导出 - 1
console.log(fnName2());
// => 按需导出 - 2

# 方法5

现在有三个文件,分别是 ck.jstest.jsindex.js

现在 ck.js 导出一个模块,test.js 导入,并且再次把这个模块导出出来,index.js 再导出;

【ck.js】
export function user() {
    return {
        name: '曹昆'
    }
}

【test.js】
// 导入 ck.js 文件的内容 并导出
export { user } from './ck'


【index.js】
import {user} from './test';
console.log(user)
// => function user(){ ... }