1.class
关键字:定义类(构建实例) ->ES5
中为构造函数
2.语法格式:
class Person{ attr = val; //实例属性 static attr = val; //静态属性 #attr = val; //私有属性 constructor(x,f){ //构造方法,必须要有,默认返回this this.x = x; //实例属性 this.f = f; //实例方法 -- f的实参是一个函数 } get attr(){return val;} //attr就是属性名 set attr(val){} funName(){} //原型方法 static funName(){} //静态方法 #funName(){} //私有方法 } Object.assign(Person.prototype,{attr:val}); //原型属性
3.调用(实例化):new Person()
4.继承:
class Son extends Parent{ constructor(){ super(); //调用父类的构造函数,父类的参数作为super的参数 this.x = 1; //必须先调用super再才能调用本身的this } }
5.继承注意点:
1.子类可以不写
constructor
,但是写了constructor
就必须先调用super()
2.可继承:实例属性及方法,原型属性及方法,静态属性及方法
3.不可继承:私有属性及方法
二、ESModule
JS模块化解决方案
1.
CommonJS
规范:JS
模块的加载方案,同步加载,一般用在服务端 --Node.js
2.
AMD
,CMD
规范:JS
模块的加载方案,异步加载,一般用在客户端 --require.js
,sea.js
以上模块加载方式为运行时加载,只有在运行时才能得到对象
3.
ES6
模块化,模块加载方式,既可用在服务端也可用在客户端 -- 编译时加载4.一个文件就是一个模块
ES6模块化
1.
export
命令:规定模块的对外接口 -- 文件内的方法对外暴露的名字1.对外暴露单个接口 export var varName = val; export function foo(){}; 2.对外暴露多个接口 export {name1,name2 as name3} //as:给name2取别名 注意:export对外导出必须同时导出变量名和值!
2.import
命令:加载模块及对应接口
import {name1,name2 as name3} from "path/*.js"; 注意:1.导入的接口名必须与导出的接口名一一对应 2.文件加载的路径可以是绝对路径,也可以是相对路径--相对路径必须以/,./,../开头,如果都没有则需要配置文件 3.多个相同的import只会执行一次
3.全部加载:
import * as name from "path/*.js";
4.默认导出:
export default val/function/class; 注意:1.一个模块只能有一个默认导出 2.default相当于是默认导出的变量名,所以default后直接跟值即可
5.默认导入:
import name from "path/*.js" 注意:name就是默认导出的接口名字