zoukankan      html  css  js  c++  java
  • js学习笔记(九)

    JavaScript

    JavaScript 模块的导入与导出

    js模块的产生是便于代码的复用,可以从一个程序导出也可以导入到另一个程序中使用。
    - 代码的可维护性和易用性提高;
    - 复用代码的逻辑框架
    - 保护模块也保护不受其他模块影响
    - 解决命名空间问题和命名冲突问题

    一、模块modules的导出

    模块导出可以使用module.exports来导出

    let Animal ={}  //定义一个代表模块的对象
    Animal.name = 'dog'  //添加模块的属性
    Animal.age = 1
    module.exports = Animal  //将Animal对象作为模块导出,其中module代表了这一模块,exports将这一模块作为对象导出。
    //--------------------------------------
    
    //另一中导出的方法,利用module.exports={code集合}来定义需要导出的属性和方法,定制
    let plant = {}  //同样定义一个对象代表导出的模块
    module.exports{
        name: 'flower',
        age : 1,
        showName(){console.log(this.name)}, //使用this指针指代导出的对象。
    //注:对象的函数定义可以使用函数表达式,也可使用es6新方法》》但箭头表达式有疑问《《??
    //注:两种导出方法不要混用
    }
    //--------------------------------------
    
    //es6中导出模块可用export default代替module.exports
    let Micro = {
        name: 'cell',
        age: 'days',
        exportName: function(){return this.name},
    }
    export default Micro  //利用export default 来代替先前的module.exports
    //注:此时导入模块需要使用 import moduleNameVar from './modulefilename',无需js后缀,import name可以自定义
    //--------------------------------------
    
    //第四种方法称为命名导出named export,无需定义模块对象。直接将需要的数据函数对象变量导出即可,此方法得名于直接导出相应变量名。
    let sea = ['red sea','mediterranean sea']
    function showName(){console.log(sea[1])}
    export {sea, showName} //直接导出对应的变量名,可分行写导出多次多个变量
    //--------------------------------------
    
    //第四种方法可以直接在变量名前加注 关键字export 注明为可导出变量
    export let sky = 'blue'
    export function show(){console.log(sky)}
    //之间将变量名expose出去即可使用,export关键字标明了变量可以导出的属性 
    //导入变量时同样需要import {name}形式来导入
    //--------------------------------------
    
    //第五中方式是别名导出的方式 export {varName1 as alias,varName2 as alias2...}
    let animnalName = 'dog'
    function showAnimal(name){console.log(name)}
    //先定义变量与函数对象,随后利用别名导出
    export {animalName as Aname, showAnimal as showA}   //此时用Aname指代了animalName,showA指代了showAnimal()
    

    导出模块共分为三步:
    - 定义一个表示模块的对象
    - 为模块添加数据和方法(func)
    - 导出模块module.exports


    二、模块的导入require()

    利用require()函数导入模块,从而可以外部控制模块内部的数据和行为。

    const Animal=require('./animal.js')  //从animal.js这个文件中导入模块,需要用const定义一个变量来接收导入的模块,常量的命名自由
    console.log(Animal.name)  //操作模块内部的数据
    //--------------------------------------
    
    //当使用export default 形式导出时
    import moduleNameVar from './modulefilename'  // 需要使用import 的形式导入,其中moduleNameVar即为导入后代表模块的变量名,无需后缀
    //--------------------------------------
    
    //当使用export {varName1,varName2,...}形式导出时
    import {varName1,varName2,} from 'moduleFilePath/Name'   //从文件名导入无需js后缀
    //import {} 可以分行写导入,多次导入多个模块变量
    //--------------------------------------
    
    //当变量直接export前缀时,可以直接导入变量名,与上同
    import {varName1,..} from 'moduleFileName'
    //导入的变量名包含了方法和属性数据,可以直接通过变量名访问使用
    //若导出时使用了混合导出,既有export {},也有export default obj,
    //function isAnimalWow() {};
    //export default isAnimalWow;
    //则导入时需要另起一行import 导入default的对象
    //--------------------------------------
    
    //别名导入的方式 import 别名 from 'moduleFile'
    import {var_alias1,...} from './menu';
    //若没有用export导出别名,而是直接导出全名,则可利用import var1Name as alias来导入
    impot {varName1 as alias1,varName2 as alias2,...} from './moduleFileName'
    //--------------------------------------
    
    //整体导入,将所有的变量作为整体别名模块导入,类似python
    import * as Alias from 'moduleFileName'
    

    导入模块主要分为两步:
    - require('module/path')或者import导入模块所在js文件;
    - 可以利用函数、表达式操作代表模块的const变量,从而操作模块内部的属性数据和方法。


    三、总结

    利用module.exports 导出模块,利用require()导入模块
    ES6标准中可以利用export, export defaultexport as等导出,利用import 导入



    tips
    1.js**导出**模块时的一些迷惑 module.exports

    module.exports 初始值为一个空对象 {}
    exports 是指向的 module.exports 的引用
    require() 返回的是 module.exports 而不是 exports

    2.js的this指针
    3.老版本的定义方法
    4.import {}export {}可以分行写,导入多个模块或变量

  • 相关阅读:
    youku客户端
    youku服务端
    [计算机网络]从页面输入网址,回车到显示内容,这中间到底经历了什么
    [碎碎念]在嘛,吱一声.吱...
    [数据结构与算法]08 队列( Queue )以及队列实现的三种方式( Java 版)
    过年了,随便说点儿啥
    [碎碎念]为什么要写易维护的代码
    [碎碎念]如何成为更好的自己
    [年终总结]愿你在以后的黑暗时刻,都能想起我
    [数据结构与算法]07 关于单链表环的操作( Java 版)
  • 原文地址:https://www.cnblogs.com/Tom-Ren/p/9897842.html
Copyright © 2011-2022 走看看