model模块

所谓的模块就是一个独立的文件,文件与文件之间是相互封闭的。

//-----------------modeltest.js-----------------

export var webName = "百度";   // 定义变量

export let url = 'www.baidu.com';  // 定义变量

export const year = 2017;  // 定义常量

 // 导出别名

export {  // 可以导出变量和常量
  webName as web,  // web 是别名
  url as webUrl,
  year as webYear
}

export function add(a,b){  // 可以导出一个函数
  return a+b;
}

export default class User{  // 可以导出一个类    default 默认导出值,当没有其他导出,此导出默认为整个模块的导出值
  constructor(){  // constructor 构造器
    console.log('user被创建了');
  }
}

export class Register{  // 可以导出一个类
  constructor(){
    console.log('register被创建了');
  }
}

//-----------------Hello.vue------------------

// import User,{webName,url,year,add} from '../models/modeltest.js'  // User是默认导出,需要单独拿出

// import User,* as uu from '../models/modeltest.js';   // * 代表全局导入,uu为别名,导入的变量需要加别名识别,例:uu.webName,此为ES6提供的方法

// var mt = require('../models/modeltest.js');  // require是ES5提供的方法

import Student,* as uu from '../models/modelChild.js';

console.log('webName:' + uu.webName);

console.log('add:' + uu.add(9,12));

var user = new uu.User();

// 在父子类继承的过程中,如果父类里面有default前缀,default无效且会报错,如果想要被继承,需要删除父类中的default
export class Register{

var student = new Student();

// console.log(mt.webName);

// console.log(mt.url);

// console.log(mt.age);

// console.log(mt.add(3,4));

//----------------modelChild.js(继承)------------------

// 模块可以被继承

export {webName,url,year,add,User} from './modeltest.js';  // User类的default必须去掉,否则无法访问

export default class Student{  // 子类中可以写默认 default
  constructor(){
    console.log('Student被创建了');
  }
} 

//-------------- require 和 import 差别 --------------

require相当于module.exports的传送门,module.exports后面的内容是什么,require的结果就是什么,对象、数字、字符串、函数......再把require的结果赋值给某个变量,相当于把require和module.exports进行平行空间的位置重叠。

而且 require 理论上可以运用在代码的任何地方,甚至不需要赋值给某个变量之后再使用,比如:

require('./a')();   // a模块是一个函数,立即执行a模块函数

var data = require('./a').data;  // a模块导出的是一个对象

var a = require('./a')[0];   // a模块导出的是一个数组

在使用时,完全可以忽略模块化这个概念来使用require,仅仅把它当做一个node内置的全局函数,它的参数甚至可以是表达式:

require(process.cwd() + '/a');

但是import则不同,它是编译时的(require是运行时的),它必须放在文件开头,而且使用格式也是确定的,不容质疑。它不会将整个模块运行后赋值给某个变量,而是只选择import的接口进行编译,这样import在性能上比require好很多

从理解上,require是赋值过程,import是解构过程

注: 优先import

实例:

原文地址:https://www.cnblogs.com/crazycode2/p/6685068.html